## Loading required package: knitr

1 Prelim

1.1 Libraries

source("PCAWG-functions.R")
## Loading required package: GenomeInfoDb
## Loading required package: BiocGenerics
## Loading required package: parallel
## 
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:parallel':
## 
##     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply,
##     parCapply, parLapply, parLapplyLB, parRapply, parSapply, parSapplyLB
## The following objects are masked from 'package:stats':
## 
##     IQR, mad, xtabs
## The following objects are masked from 'package:base':
## 
##     anyDuplicated, append, as.data.frame, cbind, colnames, do.call, duplicated, eval, evalq, Filter, Find,
##     get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map, mapply, match, mget, order, paste,
##     pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort, table,
##     tapply, union, unique, unsplit, which, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
## 
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:base':
## 
##     colMeans, colSums, expand.grid, rowMeans, rowSums
## Loading required package: IRanges
## Loading required package: GenomicRanges
## Loading required package: Biostrings
## Loading required package: XVector
## Loading required package: SummarizedExperiment
## Loading required package: Biobase
## Welcome to Bioconductor
## 
##     Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see
##     'citation("Biobase")', and for packages 'citation("pkgname")'.
## 
## Attaching package: 'VariantAnnotation'
## The following object is masked from 'package:base':
## 
##     tabulate
## Warning: NAs introduced by coercion
## Loading required package: VGAM
## Loading required package: splines
## Warning: NAs introduced by coercion

2 Load data

2.1 Whitelist

2.1.1 SNV and MNV

p <- "../final/annotated_014/snv_mnv"
d <- dir(p, pattern="*.vcf.RData", full.names=TRUE)
finalSnv <- unlist(mclapply(split(d, seq_along(d) %/% 100), lapply, function(f) { # read in batches of 100
            e <- new.env()
            load(f, envir=e)
            e$vcf
        }, mc.preschedule=FALSE), recursive=FALSE)
names(finalSnv) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))

2.1.2 Copy number profiles

p <- "../final/annotated_014/cn"
finalBB <- list()
for( f in dir(p, pattern="*.bb_granges.RData", full.names=TRUE)){
    load(f)
    colnames(mcols(bb)) <- sub("star.1","time.star",colnames(mcols(bb)) ) # Fix naming problem
    finalBB[[f]] <- bb
}
names(finalBB) <- sub(".conse.+","",dir(p, pattern="*.bb_granges.RData", full.names=FALSE))

2.1.3 Indel

p <- "../final/annotated_014/indel"
d <- dir(p, pattern="*.vcf.RData", full.names=TRUE)
finalIndel <- unlist(mclapply(split(d, seq_along(d) %/% 100), lapply, function(f) { # read in batches of 100
                    e <- new.env()
                    load(f, envir=e)
                    e$vcfIndel
                }, mc.preschedule=FALSE), recursive=FALSE)
names(finalIndel) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))

2.1.4 Clusters and purity

finalClusters <- list()
finalPurity <- numeric()
p <- "../final/annotated_014/clusters"
for( f in dir(p, pattern="*.RData", full.names=TRUE)){
    load(f)
    finalClusters[[f]] <- clusters
    finalPurity[f] <- purity
}
names(finalClusters) <- names(finalPurity) <- sub(".conse.+","",dir(p, pattern="*.RData", full.names=FALSE))

2.2 Update drivers

2.2.1 Update finalDrivers

finalDriversAnnotated <- finalDrivers
d <- info(finalSnv[[3]])[seq_along(finalDriversAnnotated),19:32]
#d[,] <- NA
mcols(finalDriversAnnotated)[colnames(d)] <- d
for(i in seq_along(finalDriversAnnotated)){
    if(finalDriversAnnotated$mut_type[i] %in% c("snv","mnv")){
        v <- finalSnv[[as.character(finalDriversAnnotated$sample[i])]]
    }else{
        v <- finalIndel[[as.character(finalDriversAnnotated$sample[i])]]
    }
    j <- findOverlaps(finalDriversAnnotated[i], v, select='first')
    if(!is.na(j)){
        mcols(finalDriversAnnotated)[i,colnames(d)] <- info(v)[j, colnames(d)]
        refDepth(finalDriversAnnotated)[i] <- info(v)[j,"t_ref_count"]
        altDepth(finalDriversAnnotated)[i] <- info(v)[j,"t_alt_count"]
    }
    else
        mcols(finalDriversAnnotated)[i,colnames(d)] <- NA
}

2.3 Graylisted data

2.3.1 SNV and MNV

p <- "../final/annotated_014/graylist/snv_mnv"
finalSnvGray <- mclapply(dir(p, pattern="*.vcf.RData", full.names=TRUE), function(f) {
            e <- new.env()
            load(f, envir=e)
            e$vcf
        })
names(finalSnvGray) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))
finalSnv[names(finalSnvGray)] <- finalSnvGray

2.3.2 Copy number profiles

p <- "../final/annotated_014/graylist/cn"
finalBBGray <- list()
for( f in dir(p, pattern="*.bb_granges.RData", full.names=TRUE)){
    load(f)
    colnames(mcols(bb)) <- sub("star.1","time.star",colnames(mcols(bb)) ) # Fix naming problem
    finalBBGray[[f]] <- bb
}
names(finalBBGray) <- sub(".conse.+","",dir(p, pattern="*.bb_granges.RData", full.names=FALSE))
finalBB[names(finalBBGray)] <- finalBBGray

2.3.3 Indel

p <- "../final/annotated_014/graylist/indel"
finalIndelGray <- mclapply(dir(p, pattern="*.vcf.RData", full.names=TRUE), function(f) {
            e <- new.env()
            load(f, envir=e)
            e$vcfIndel
        })
names(finalIndelGray) <- sub(".conse.+","",dir(p, pattern="*.vcf.RData", full.names=FALSE))
finalIndel[names(finalIndelGray)] <- finalIndelGray

2.3.4 Clusters and purity

finalClustersGray <- list()
finalPurityGray <- numeric()
p <- "../final/annotated_014/graylist/clusters"
for( f in dir(p, pattern="*.RData", full.names=TRUE)){
    load(f)
    finalClustersGray[[f]] <- clusters
    finalPurityGray[f] <- purity
}
names(finalClustersGray) <- names(finalPurityGray) <- sub(".conse.+","",dir(p, pattern="*.RData", full.names=FALSE))
finalClusters[names(finalClustersGray)] <- finalClustersGray
finalPurity <- c(finalPurity, finalPurityGray)

whiteList <- seq_along(finalSnv) %in% 1:2703
grayList <- !whiteList

2.4 Structural variants

finalSv <- mclapply(dir("../final/pcawg_consensus_1.6.161116.somatic_svs", pattern='*.vcf.gz$', full.names=TRUE), function(x) {
            t <- try(readVcf(x))
            return(t)
        })
names(finalSv) <- sub("../final/pcawg_consensus_1.6.161116.somatic_svs/","", sub(".pcawg_consensus_1.6.161116.somatic.sv.vcf.gz","",dir("../final/pcawg_consensus_1.6.161116.somatic_svs", pattern='*.vcf.gz$', full.names=TRUE)))
finalSv <- finalSv[names(finalSnv)]

3 QC

q1 <- sapply(finalSnv, function(vcf) mean(abs(0.5- info(vcf)$pMutCNTail) > 0.495 , na.rm=TRUE))
q5 <- sapply(finalSnv, function(vcf) mean(abs(0.5- info(vcf)$pMutCNTail) > 0.475 , na.rm=TRUE))
par(mfrow=c(1,1))
boxplot(1-q5 ~ donor2type[sample2donor[names(finalSnv)]], las=2, ylab="Fraction of data inside theoretical 95% CI")
abline(h=0.95, lty=3)

#pdf("QQplots.pdf", 4,4, pointsize=8)
par(mfrow=c(5,5))
for(i in seq_along(finalSnv)[1:25]){
    n <- nrow(finalSnv[[i]])
    qqnorm(qnorm(info(finalSnv[[i]])$pMutCNTail[sample(1:n, min(1e4,n))]), main=paste(substr(names(finalSnv)[i],1,8), "Q5 =", signif(q5[i],2), ", Q1 =", signif(q1[i],2)), xlim=c(-5,5), ylim=c(-5,5), pch=16)
    abline(0,1, col='red')
}

#dev.off()

4 Driver genotypes

4.1 MAP genotypes

finalGenotypesSnv <- simplify2array(mclapply(finalSnv[whiteList], getGenotype, useNA="always"))
finalGenotypesIndel <- simplify2array(mclapply(finalIndel[whiteList], getGenotype, useNA="always"))
finalGenotypes <- aperm(abind::abind(subs=finalGenotypesSnv,indels=finalGenotypesIndel, along=5), c(1,5,2,3,4))
rm(finalGenotypesSnv,finalGenotypesIndel)

4.2 Probabilistic genotypes

finalGenotypesSnvP <- simplify2array(mclapply(finalSnv[whiteList], probGenotype))
finalGenotypesIndelP <- simplify2array(mclapply(finalIndel[whiteList], probGenotype))
finalGenotypesP <- aperm(abind::abind(subs=finalGenotypesSnvP,indels=finalGenotypesIndelP, along=4), c(1,4,2,3))
rm(finalGenotypesSnvP,finalGenotypesIndelP)

4.3 Probabilistic genotypes - tail prob (QC)

finalGenotypesSnvQ <- simplify2array(mclapply(finalSnv[whiteList], probGenotypeTail))
finalGenotypesIndelQ <- simplify2array(mclapply(finalIndel[whiteList], probGenotypeTail))
finalGenotypesQ <- aperm(abind::abind(subs=finalGenotypesSnvQ,indels=finalGenotypesIndelQ, along=3), c(1,3,2))
rm(finalGenotypesSnvQ,finalGenotypesIndelQ)

5 Save output

save.image(file=dumpfile, compress=FALSE)
save(finalGenotypes, finalGenotypesP, finalGenotypesQ, file=paste0(Sys.Date(),"-FinalGenotypes.RData"))

6 Timing of point mutations

6.1 Duplicated samples

w <- names(finalSnv)
n <- names(which(table(sample2donor[w]) > 1)) # donors
s <- w[w %in% names(sample2donor[sample2donor %in% n])] # multisamples
d <- setdiff(sample2donor[w], sample2donor[levels(finalDrivers$sample)]) # donors w/o driver
u <- sample2donor[s[sample2donor[s] %in% intersect(d,n)]]
selectedSamples <- !w %in% setdiff(s[!s %in% finalDrivers$sample ], names(u)[!duplicated(u)])
uniqueSamples <- !duplicated(sample2donor[names(finalSnv)])

6.2 Overall distribution

6.2.1 Subs or indels

f <- function(x) unlist(sapply(seq_along(x), function(i) rep(i, x[i])))
d <- t(asum(finalGenotypesP[,"subs",,], 1))
o <- order(droplevels(donor2type[sample2donor[rownames(d)]]), -d[,1]/rowSums(d))
I <- t(apply(d/rowSums(d), 1, function(x) f(mg14:::roundProp(x * 100,p=100))))
d <- t(asum(finalGenotypesP[,"indels",,], 1))
J <- t(apply(d/rowSums(d), 1, function(x) if(!any(is.nan(x))) f(mg14:::roundProp(x * 100,p=100)) else rep(NA,100)))
s <- cumsum(table(droplevels(donor2type[sample2donor[rownames(d)]][o])))
col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)] ## Colors for early-subclonal
par(fig=c(0,1,0,1),mar=c(1,4,1,1)+.1, mgp=c(2,.5,0), mfrow=c(3,1), bty="n", las=2, xpd=FALSE)
image(z=I[o,], x=1:nrow(I), useRaster=TRUE, col=col, xaxt="n", ylab="SNVs")
abline(v=s, col='white')
image(z=J[o,], x=1:nrow(I),useRaster=TRUE, col=col, xaxt="n", ylab="Indels")
abline(v=s, col='white')
par(bty="n", xpd=NA)
plot(NA,NA, xaxt="n", yaxt="n", xlab="", ylab="", xlim=c(0, nrow(J)), ylim=c(0,1), xaxs="i", yaxs='i')
d0 <- s - diff(c(0,s))/2
d1 <- mg14:::mindist(d0,30)
segments(d0, 1.12, d0, 1.2)
segments(d0, 1.12, d1, 1.08)
segments(d1, 1.08, d1, 1)
mg14::rotatedLabel(x0 = d1, names(s), y0=1)
legend("bottom", fill=col, legend=paste(dimnames(finalGenotypes)[[3]]), bty="n", horiz=TRUE, title="Mutation timing")

#t <- 12/8
#dev.copy2pdf(file="finalMutationProp.pdf", width=9*t, height=2.7*t, pointsize=8*t)

6.2.2 Subs + indels

f <- function(x) unlist(sapply(seq_along(x), function(i) rep(i, x[i])))
d <- t(asum(finalGenotypesP[,,,], 1:2))
o <- order(droplevels(donor2type[sample2donor[rownames(d)]]), -d[,1]/rowSums(d))
I <- t(apply(d/rowSums(d), 1, function(x) f(mg14:::roundProp(x * 100,p=100))))
s <- cumsum(table(droplevels(donor2type[sample2donor[rownames(d)]][o])))

col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)] ## Colors for early-subclonal
par(fig=c(0,1,0,1),mar=c(1,4,1,1)+.1, mgp=c(2,.5,0), mfrow=c(2,1), bty="n", las=2, xpd=FALSE)
image(z=I[o,], x=1:nrow(I), useRaster=TRUE, col=col, xaxt="n", ylab="Point mutations")
abline(v=s, col='white')
par(bty="n", xpd=NA)
plot(NA,NA, xaxt="n", yaxt="n", xlab="", ylab="", xlim=c(0, nrow(I)), ylim=c(0,1), xaxs="i", yaxs='i')
d0 <- s - diff(c(0,s))/2
d1 <- mg14:::mindist(d0,30)
segments(d0, 1.12, d0, 1.2)
segments(d0, 1.12, d1, 1.08)
segments(d1, 1.08, d1, 1)
mg14::rotatedLabel(x0 = d1, names(s), y0=1)
legend("bottom", fill=col, legend=paste(dimnames(finalGenotypes)[[3]]), bty="n", horiz=TRUE, title="Mutation timing")

#t <- 12/8
#dev.copy2pdf(file="finalMutationPropAll.pdf", width=9*t, height=1.8*t, pointsize=8*t)

6.2.3 Barplot drivers

p <- asum(finalGenotypesP[,,,selectedSamples[whiteList]], c(2,4))
g <- asum(finalGenotypes[,,,,selectedSamples[whiteList]], c(2,4:5))
g <- g[order(rowSums(g), decreasing=TRUE),]
colnames(g) <- paste(colnames(g))
rownames(g) <- paste(rownames(g)) 
rownames(p) <- paste(rownames(p))
p <- p[rownames(g),]
w <- rowSums(g) > 0
w[1] <- FALSE

Unique loci

l <- sapply(strsplit(rownames(p),"::"), function(x) paste(x[2:3], collapse=":"))
pu <- t(sapply(unique(l), function(u) asum(p[l==u,,drop=FALSE], 1)))
gu <- t(sapply(unique(l), function(u) asum(g[l==u,,drop=FALSE], 1)))
gu <- gu[order(rowSums(gu), decreasing=TRUE),]
pu <- pu[rownames(gu),]
wu <- rowSums(gu) > 0
wu[1] <- FALSE
par(fig=c(0,1,0,1),mar=c(1,4,1,1)+.1, mgp=c(3,.5,0))
barplot(t(gu[wu,]), col=col, las=2, legend=TRUE, args.legend=list("topright", bty='n'), ylab="Number of cases", names.arg=rep("",sum(wu)), border=NA)
#mg14::rotatedLabel(x=.Last.value,labels=rownames(g)[62:201], cex=.25)

u <- par("usr")
v <- c(
        grconvertX(u[1:2], "user", "ndc"),
        grconvertY(u[3:4], "user", "ndc")
)
v <- c( (v[1]+v[2])/3.33, v[2], (v[3]+v[4])/3, v[4] )
par( fig=v, new=TRUE, mar=c(0,0,0,0) )
b <- barplot(t(gu[2:51,]), col=col, las=2,  names.arg=rep("",50))
mg14::rotatedLabel(x=b,labels=rownames(gu)[2:51], cex=.5)

#dev.copy2pdf(file="finalDrivers.pdf", width=9, height=5, pointsize=8)

6.2.4 Barpot drivers - proportions

par(fig=c(0,1,0,1),mar=c(3,4,1,1)+.1, mgp=c(3,.5,0))
w <- rowSums(pu) > 0
n <- 50
b <- barplot(t(pu /rowSums(pu))[,w], width=c(rep(2,n+1), rep(0.2,sum(w)-n-1)), space=c(0,2,rep(0.1,n), rep(0,sum(w)-n-2)), col=col, border=NA, ylab="Fraction of mutations", names.arg=rep("",sum(w)))
mg14::rotatedLabel(x=b[1:(n+1)],labels=c("Genome-wide", rownames(pu)[2:(n+1)]), cex=.5)

#s <- 12/8
#dev.copy2pdf(file="finalDriversProp.pdf", width=9*s, height=3*s, pointsize=8*s)

6.2.5 Cumulative effects

tt <- abind::abind(pu[-1,], pu[-1,] + 0.5, along=3)

par(mar=c(3,3,1,1), mgp=c(2,.5,0), bty="L")
r <- array(apply(tt/rep(colSums(tt), each=nrow(tt)), 3, function(x) apply(x, 2, function(y) cumsum(sort(y, decreasing=TRUE)))), dim=dim(tt))
plot(cumsum(sort(r[,1,1], decreasing=TRUE)), col=NA, type='s', xlab="Number of different driver genes", ylab="Fraction of driver mutations", log='', ylim=c(0,1), xlim=c(0,664), xaxs='i', yaxs='i')
for(j in 1:4) {
    polygon(c(1:nrow(r), nrow(r):1), c(r[,j,1], rev(r[,j,2])), col=paste0(col[j],"33"), border=NA)
    lines((r[,j,1]+r[,j,2])/2, col=col[j], lwd=2)
    points(y=0,x=which.min((r[,j,1]+r[,j,2])/2 < 0.5), col=col[j], pch="|")
}
legend("bottomright", col=col[1:4], lty=1, paste0(c("clonal [early]", "clonal [late]", "clonal [other]", "subclonal"), ", n=", round(colSums(p[-1,]))[-5]), bty="n")
abline(h=0.5, lty=3)

#dev.copy2pdf(file="finalGenesCumulative.pdf", width=4,height=4)
par(mar=c(4,3,2.5,1), mgp=c(2,.5,0), bty="L")
d50 <- apply((r[,,1]+r[,,2])/2 < 0.5, 2, which.min)[c(1,3,2,4)]
b <- barplot(d50,las=2, col=col[c(1,3,2,4)], border=NA, ylab="Genes contributing 50% of driver mutations")
segments(b,apply(r[,,1] < 0.5, 2, which.min)[c(1,3,2,4)],b,apply(r[,,2] < 0.5, 2, which.min)[c(1,3,2,4)])
mg14::rotatedLabel(x=b,labels=c("clonal [early]", "clonal [late]", "clonal [other]", "subclonal")[c(1,3,2,4)])

#dev.copy2pdf(file="finalGenes50.pdf", width=3,height=4)

7 Whole-genome duplications

7.1 Prelim

Final ploidy, weighted if subclonal CN

finalPloidy <- sapply(finalBB, averagePloidy)
names(finalPloidy) <- names(finalBB)

Final homozygousity, weighted if subclonal CN

finalHom <- sapply(finalBB, averageHom)
names(finalHom) <- names(finalBB)

7.2 WGD classification

7.2.1 Based on ploidy and homozygousity

isWgd <- .classWgd(finalPloidy, finalHom)
plot(finalHom, finalPloidy, col=.classWgd( finalPloidy, finalHom)+1, xlim=c(0,1))

7.2.2 Based on timing

fracGenomeWgdComp <- t(sapply(finalBB, function(bb) {
                    fgw <- try(fractionGenomeWgdCompatible(bb)); 
                    if(class(fgw)!='try-error') fgw
                    else rep(NA,10)}))
rownames(fracGenomeWgdComp) <- names(finalBB)

wgdStar <- factor(rep(1,nrow(fracGenomeWgdComp)), levels=0:3, labels=c("unlikely","uninformative","likely","very likely"))
wgdStar[fracGenomeWgdComp[,"avg.ci"]<=0.75 & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] >= 0.33 ] <- "likely"
wgdStar[fracGenomeWgdComp[,"nt.wgd"]/fracGenomeWgdComp[,"nt.total"] < 0.66] <- "unlikely"
wgdStar[wgdStar=="likely" & fracGenomeWgdComp[,"nt.wgd"]/fracGenomeWgdComp[,"nt.total"] > 0.8 & fracGenomeWgdComp[,"sd.wgd"] < 0.1 &  fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.5] <- "very likely"
names(wgdStar) <-  names(finalBB)
prop.table(table(wgdStar[!isWgd]))
## 
##      unlikely uninformative        likely   very likely 
##   0.203061224   0.775510204   0.019387755   0.002040816
wgdPoss <- !isWgd & 2.5 - 1.5 * finalHom <= finalPloidy

wgdStat <- factor(wgdPoss + 2*isWgd - wgdPoss*isWgd, labels=c("absent","possible","present"))
table(wgdStat, wgdStar)
##           wgdStar
## wgdStat    unlikely uninformative likely very likely
##   absent        384          1492      9           0
##   possible       14            28     29           4
##   present        68             1    573         176

8 Temporal distribution of chromosomal gains

8.1 Functions

This one aggregates individual segments by chromosome

aggregatePerChromosome <- function(bb, isWgd=FALSE){
    .aggregateSegments <- function(m){
        #m <- mcols(bb)
        t <- weighted.mean(m$time, m$n.snv_mnv, na.rm=TRUE)
        n <- sum(m$n.snv_mnv[!is.na(m$time)], na.rm=TRUE)
        sd <- sd(m$time, na.rm=TRUE)
        ci <- weighted.mean(m$time.up-m$time.lo, m$n.snv_mnv, na.rm=TRUE)
        w <- sum(m$width[!is.na(m$time)], na.rm=TRUE)
        c(time=t, n=n, sd=sd, ci=ci,w=w)
    }
#   if(!isWgd){
    s <- split(as.data.frame(bb)[,c("time","time.up","time.lo","n.snv_mnv","width")], seqnames(bb))
    r <- t(sapply(s, .aggregateSegments))
    r <- r[c(1:22,"X"),]
#   }else{
    w <- .aggregateSegments(as.data.frame(bb))
    r <- rbind(r,WGD=w)
#   }
    return(r)
}

8.2 Aggregate

allChrAgg <- simplify2array(mclapply(finalBB, aggregatePerChromosome, mc.cores=2))

t <- allChrAgg[1:23,"time",!isWgd]
t[allChrAgg[1:23,"w",!isWgd] < diff(chrOffset)[1:23]*.33] <- NA

s <- split(as.data.frame(t(t)), droplevels(donor2type[sample2donor[names(finalSnv)]])[!isWgd])
n <- 10


at <- function(x, n){
    if(sum(!is.na(x))<3) return(rep(sum(!is.na(x))/n,n))
    bw=if(sum(!is.na(x))< 6) 0.5 else "nrd0"
    d <- density(x, n=n, from=1/n/2, to=1-1/n/2, bw=bw, na.rm=TRUE)
    d$y/sum(d$y)*d$n
}

allChrCancerHist <- sapply(s, apply, 2, at, n=n, simplify="array")
u <- split(data.frame(WGD=allChrAgg["WGD","time",isWgd]), droplevels(donor2type[sample2donor[names(finalSnv)]])[isWgd])
wgdCancerHist <- sapply(u, function(x) if(nrow(x)>0){at(x$WGD,n=n)}else{rep(0,n)}, simplify="array")
allChrCancerHist <- abind::abind(allChrCancerHist, All=sapply(sapply(s, as.matrix), at, n=n, simplify="array")/23*5, WGD=wgdCancerHist, along=2)

8.3 Per tumour type

prgn <- RColorBrewer::brewer.pal(11,"PRGn")
set1 <- RColorBrewer::brewer.pal(9,"Set1")
col <- colorRampPalette(set1[c(4,9,3)])(n)

p <- 0
v <- table(droplevels(donor2type[sample2donor[names(finalSnv)]]))
h <- (allChrCancerHist + p)  / rep(v + p, each=prod(dim(allChrCancerHist)[1:2]))
h <- aperm(h, c(2,3,1))

a <- colMeans(h[c("All","WGD"),,] * c(23/5,1)) %*% 1:n / asum(h* c(23/5,1), c(1,3))
o <- order(-a)
h <- h[,o,]
w <- v[o]>=15 & apply(h, 2, max) > 0.05*8/n
h <- h[,w,]

m <- 0.02
layout(matrix(1:prod(dim(h)[1:2]+1), ncol=dim(h)[1]+1, byrow=TRUE), height=c(rev(apply(h, 2, max))+m, 0.15), width=c(5, rep(1,dim(h)[1])))
par(mar=c(0.05,0.1,0,0.1), xpd=NA)
for(j in dim(h)[2]:0+1) for(i in 0:dim(h)[1]+1) {
        #if(all(h[i,j,]==0)) 
        if(i==1 & j !=1) {plot(NA,NA,xlab="",ylab="", xaxt="n",yaxt="n",xlim=c(0,1),ylim=c(0,1), bty="n")
            text(1,0,dimnames(h)[[2]][j-1],pos=2)
            next
        }
        if(j ==1 ){
            plot(NA,NA,xlab="",ylab="", xaxt="n",yaxt="n",xlim=c(0,1),ylim=c(0,1), bty="n")
            if(i==1) next
            text(0.5,1,dimnames(h)[[1]][i-1],pos=1)
            next
        }
        r <- c(0,max(h[,j-1,]+m))
        par(bty=if(i==2)"L" else "n")
        barplot(h[i-1,j-1,], ylim=r, width=1/n,space=0, col=rev(col), xaxt="n", yaxt="n", xlab="",ylab="", border=NA,xpd=TRUE, yaxs="i", xaxs="i", xlim=c(-0.5/n,1+0.5/n))
        axis(side=1, at=c(-0.5/n,1+0.5/n), labels=c("",""), tcl=-.1)
        if(i>1)
            abline(v=0, col='lightgrey', lty=3)
        if(i==2){
            abline(h=0.05*8/n, col='lightgrey', lty=1)
            axis(side=2, at=c(0,0.05*8/n), labels=c("",""), tcl=-.1)
        }
    }

#dev.copy2pdf(file="histTiming.pdf",width=6, height=6, pointsize=8)


vv <- v[dimnames(h)[[2]]]
vv <- vv/sum(vv)

hh <- matrix(matrix(aperm(h, c(1,3,2)), ncol=length(vv)) %*% vv, nrow=nrow(h))
rownames(hh) <- rownames(h)

8.4 Pan-Can histograms

par(mar=c(3,3,1,1), mgp=c(2,.5,0), tcl=-0.5, bty="L", xpd=NA)
barplot(hh["WGD",], space=0, col=rev(col), xlab="Time [mutations]", ylab="Relative frequency", width=0.1, ylim=c(0,.065), yaxs='r', border=NA)
axis(side=1)

barplot(hh["All",], space=0, col=rev(col), xlab="Time [mutations]", ylab="Relative frequency", width=0.1, ylim=c(0,.065), yaxs='r', border=NA)
axis(side=1)

#dev.copy2pdf(file="histTimingPanCan.pdf",width=2, height=2, pointsize=8)

9 Synchronous gains

9.1 Classification

d <- fracGenomeWgdComp
i <- d[,"avg.ci"]<=0.5 & d[,"chr.all"] > 2 #&  fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] >= 0.1
timingClass <- paste(ifelse(isWgd,"WGD","ND"), ifelse(!i, "uninformative",""))
timingClass[i] <- paste0(timingClass[i], ifelse(d[i,"nt.wgd"]/d[i,"nt.total"] > 0.75,"sync","async"))
#timingClass[i] <- paste0(timingClass[i], cut(fracGenomeWgdComp[i,"nt.wgd"]/fracGenomeWgdComp[i,"nt.total"], c(0,0.5,0.8,1), include.lowest=TRUE))
timingClass <- factor(timingClass)
#pdf("TimingClass.pdf", 4,4)
colTime <- c("#A0C758","#6B8934","#BEC6AD","#CEB299","#CC6415","#EF7B00")
names(colTime) <- levels(timingClass)[c(4,5,6,3,2,1)]
c <- c(RColorBrewer::brewer.pal(9, "Pastel1"),"#DDDDDD")
t <- table(timingClass)[names(colTime)]
pie(t, init.angle=90, labels=paste0(names(t), ",\nn=", t), col=colTime)
#t <- table(isWgd)
par(new=TRUE)
symbols(x=0,y=0,circles=0.4, inches=FALSE, add=TRUE, bg="white")

#pie(t, labels=c("",""), col=NA, lwd=5, lty=1, init.angle=90)
#dev.off()

colnames(d) <- c("ntCoamp","ntAmp","timeCoamp","segCoamp","segAmp","chrCoamp","chrAmp", "sdTimeCoamp","avgCiSeg","sdAllSeg")
timingInfo <- data.frame(avgPloidy=finalPloidy, avgHom=finalHom, isWgd=isWgd, d, informative=i, timingClass=timingClass)
#tab <- rbind(tab, data.frame(WGD_call=otherStat, WGD_timing=NA, ploidy=otherPloidy, hom=otherHom, nt.wgd=NA, nt.total=NA, time.wgd=NA, sd.wgd=NA,avg.ci=NA, sd.all=NA))
write.table(file=paste0(Sys.Date(),"-Timing-info.txt"), timingInfo, quote=FALSE, row.names=TRUE, col.names=TRUE, sep="\t")

9.2 Timing examples

w <- which(wgdStar=="likely" & !isWgd)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

w <- which(wgdStar=="very likely" & isWgd)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[9])
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): qbeta(a, *) =: x0 with |pbeta(x0,*) - alpha| = 0.022338 is not
## accurate
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): qbeta(a, *) =: x0 with |pbeta(x0,*) - alpha| = 0.024964 is not
## accurate
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9

## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): pbeta_raw(-nan, a=3.4044e+20, b=1.07421e-06, ..) -> bratio() gave
## error code 9
## Warning in qbeta(c(0.025, 0.975), beta[1], beta[2]): full precision may not have been achieved in 'qbeta'

#dev.off()

w <- which(wgdStar=="unlikely" & !isWgd & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.25 & fracGenomeWgdComp[,"avg.ci"] < 0.5)
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

9.3 GBM examples

w <- which(fracGenomeWgdComp[,"time.wgd"]<0.1 & fracGenomeWgdComp[,"nt.total"]/chrOffset["MT"] > 0.1 &  !isWgd & donor2type[sample2donor[names(finalBB)]]=="CNS-GBM")
#pdf(paste0(names(w[1]), ".pdf"), 4,4, pointsize=8)
plotSample(w[1])

plotSample(w[2])

plotSample(w[3])

#dev.off()

9.4 Relationship with mutation rates

Calculate number of substitutions and deciles per tumour type

n <- nSub <- sapply(finalSnv, nrow)
n[timingInfo$timeCoamp==0] <- NA
q <- unlist(sapply(split(n, donor2type[sample2donor[names(finalSnv)]]), function(x) as.numeric(cut(x, {if(sum(!is.na(x))>1) quantile(x, seq(0,1,0.1), na.rm=TRUE) else 1:10}, include.lowest=TRUE))))
m <- match(names(finalSnv),unlist(split(names(finalSnv), donor2type[sample2donor[names(finalSnv)]])))
t <- timingInfo$timeCoamp
table(decSub=q[m], time=cut(t, seq(0,1,0.1)))
##       time
## decSub (0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6] (0.6,0.7] (0.7,0.8] (0.8,0.9] (0.9,1]
##     1       19        14        12        23        27        18        25        28        40      13
##     2       13        11        12        18        18        18        21        32        29      28
##     3       15        11        16        13        15        18        31        34        24      21
##     4       16        13        13        10        22        16        12        28        37      29
##     5        8        13        14        14        15        18        18        36        35      34
##     6       15         8        20        11        12        18        19        21        38      34
##     7        8        13        14        12        16        15        26        26        37      26
##     8       13         5        16        15        16        19        23        29        37      28
##     9       20        18        10        15        20        14        16        31        25      28
##     10      27        17        14        17        13        23        17        25        24      40

Also calculate deciles of timing per tumour type

t[t==0] <- NA
r <- unlist(sapply(split(t, donor2type[sample2donor[names(finalSnv)]]), function(x) as.numeric(cut(x, {if(sum(!is.na(x))>1 & length(unique(x)) > 2) quantile(jitter(x), seq(0,1,0.1), na.rm=TRUE) else 1:10}, include.lowest=TRUE))))
table(decSub=q[m], decTime=r[m])
##       decTime
## decSub  1  2  3  4  5  6  7  8  9 10
##     1  25 25 29 22 21 20 13 23 16 20
##     2  16 20 21 16 21 22 22 19 19 23
##     3  21 18 15 27 12 25 26 17 18 15
##     4  20 14 23 16 21 24 19 18 19 21
##     5  12 27 16 20 20 13 15 26 28 24
##     6  22 14 20 14 19 21 25 17 22 20
##     7   9 19 23 26 18 26 17 12 23 19
##     8  15 24 22 16 19 22 23 15 24 20
##     9  25 21 17 23 18 16 15 25 11 24
##     10 40 18 14 21 23 20 19 13 18 27

Plot

#pdf("timeNsub.pdf", 3, 2.5, pointsize=8)
par(mar=c(3,4,1,1), bty="n", mgp=c(2,.5,0), las=1, tcl=-.25) 
d <- as.character(donor2type[sample2donor[names(finalSnv)]])
lineCol <- tissueColors
lineCol[grep("Lung", names(lineCol))] <- "black"
plot(t, nSub, log='y', bg=tissueColors[d], pch=21, xlab="Typical amplification time", ylab="", cex=.66, lwd=.5, yaxt="n", ylim=c(100,3e6))
mtext(side=2, "Number of SNVs", line=3, las=3)
u <- round(par("usr")[3:4])
a <- axisTicks(par("usr")[3:4], log=TRUE)
axis(side=2, at=a, labels=prettyNum(a))
b <- sapply(a[-length(a)], function(x) (1:10)*x)
axis(side=2, at=b, labels=rep("", length(b)), tcl=-.1)

#dev.off()

9.5 Secondary gains

Load preprocessed data, aggregated by chromsome

load("two_gain_times.RData")
doubleGains <- as.data.frame(T.i.F)
m <- paste(doubleGains$sample, doubleGains$cnMaj, doubleGains$cnMin, doubleGains$chromosome, sep="_")
s <- split(doubleGains[,c("sample","tumor_type","T1_raw","T2_raw","n_mutations")], m)
doubleGainsAggregated <- Reduce("rbind",sapply(s, function(x) {
                    data.frame(sample=x$sample[1], tumor_type=x$tumor_type[1], T1_raw=weighted.mean(x$T1_raw, x$n_mutations),T2_raw=weighted.mean(x$T2_raw, x$n_mutations), n_mutations=sum(x$n_mutations))
                }, simplify=FALSE))

Plot Pan-Can

x <- doubleGainsAggregated$T1_raw/pmax(1, doubleGainsAggregated$T2_raw)
y <- doubleGainsAggregated$T2_raw/pmax(1, doubleGainsAggregated$T2_raw)
o <- order(doubleGainsAggregated$n_mutations, decreasing=TRUE)
plot(x[o], 
        y[o], 
        bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])], pch=21,
        col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])],
        xlab="Time [mutations], first gain",
        ylab="Time [mutations], second gain",
        cex=sqrt(doubleGainsAggregated$n_mutations[o]/500)+0.1,
        lwd=0.5)

t <- table(doubleGainsAggregated$sample)

Plot by timing class

names(timingClass) <- names(finalSnv)
par(mfrow=c(2,2))
for(l in grep("uninformative",levels(timingClass), invert=TRUE, value=TRUE)){
    w <- which(timingClass[doubleGains$sample]==l)
    o <- intersect(order(doubleGainsAggregated$n_mutations, decreasing=TRUE),w)
    plot(x[o], 
            y[o], 
            bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])], pch=21,
            col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[o]]]])],
            xlab="Time [mutations], first gain",
            ylab="Time [mutations], second gain",
            cex=sqrt(doubleGainsAggregated$n_mutations[o]/500)+0.1)
    title(main=l, line=0, font.main=1)
}

Individual samples

par(mfrow=c(5,5))
for(i in as.numeric(names(t)[t>5])[1:25]){
    w <- which(doubleGainsAggregated$sample==i)
    plot(x[w],y[w], 
            col=tissueBorder[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[w]]]])], 
            bg=tissueColors[as.character(donor2type[sample2donor[names(finalSnv)[doubleGainsAggregated$sample[w]]]])], 
            type='p', xlim=c(0,1), ylim=c(0,1), 
            xlab="time 1",
            ylab="time 2",
            pch=21,
            cex=sqrt(doubleGainsAggregated$n_mutations[w]/500+0.1))
    
}

Relative latency

w <- y < 1 & x > 0
r <- ((y-x)/(1-x))
h <- hist(r[w], breaks=seq(0,1,0.025), plot=FALSE)
e <- d <- density(r[w], from=-1, to=2, bw="SJ")
i <- which(d$x < 0)
d$y[max(i) + seq_along(i)] <-  d$y[max(i) + seq_along(i)] + d$y[rev(i)]
i <- which(d$x > 1)
d$y[min(i) -  seq_along(i)] <-  d$y[min(i) -  seq_along(i)] + d$y[i]
i <- which(d$x >0 & d$x < 1)
d <- list(x=d$x[i], y=d$y[i])
plot(h$mids,h$counts/sum(h$counts),  pch=19, col='grey',ylim=c(0,max(h$counts/sum(h$counts))), xlab="Latency of second gain", ylab="Relative frequency", type='h')

#lines(d, xlim=c(0,1), type='l')

plot(d$x,cumsum(d$y * diff(d$x)[1]), xlim=c(0,1), type='l', ylim=c(0,1), xlab="Relative time of second gain", ylab="CDF")

By timing class

c <- cut(r[w], 20)
t <- table(timingClass[doubleGainsAggregated$sample[w]],c)
barplot(t[names(colTime),]/sum(t), border=NA, col=colTime, width=1/24, space=0.2, names.arg=rep("",20, bty="L", yaxs="s"))
.par()
axis(side=1, line=0.2)

Copy number increments

cn <- do.call("rbind", sapply(names(finalBB), function(n){
                    bb <- finalBB[[n]]
                    data.frame(sample=n, chr=seqnames(bb), width=width(bb), M=bb$major_cn, m=bb$minor_cn)}, simplify=FALSE))
t <- table(pmin(cn$M,3) ,  pmax(3,round(log10(cn$width),1)), timingClass[cn$sample])
x <- as.numeric(colnames(t))
plot(NA,NA, type='p', col=colTime[1], pch=16, ylim=c(0,0.8), xlim=range(10^x), xlab="Length of segment", ylab="Proportion >2 allelic copies", log='x')
for(n in dimnames(t)[[3]]) {
    y <- as.numeric(t[4,,n]/colSums(t[3:4,,n]))
    lines(10^x,y, type='p', col=paste0(colTime[n],"44"), pch=16, cex=1)#sqrt(colSums(t[3:4,,i]/1000)))
    lines(10^x, predict(loess(y ~x)), col=colTime[n], lwd=2)
}

tt <- mg14:::asum(t[,x>=7,],2)
o <- names(colTime)
p <- tt[4,o]/colSums(tt[3:4,o])
ci <- sapply(c(0.025, 0.975), qbeta, 0.025, shape1=tt[4,o]+1, shape2=tt[3,o]+1)
barplot(p, col=colTime, border=NA, las=2, ylab="Proportion >2 allelic copies", names=sub("ormative","",sub("near-diploid", "ND", names(colTime))), ylim=c(0,0.4)) -> b
segments(b, ci[,1], b, ci[,2])

Simulate higher order gains to cross-check

n <- 100
c <- 40
purity=0.7
bb <- GRanges(seqnames=1, IRanges(1,1e8), major_cn=3, minor_cn=1, clonal_frequency=purity, n.snv_mnv=n)
bb$total_cn <- bb$major_cn+bb$minor_cn
t3 <- 0.8
t2 <- 0.8 # Simultaneous second amplification
d <- data.frame(cluster=1, n_ssms=1, proportion=purity)
cnStates <- defineMcnStates(bb,clusters=d, purity=purity)
pi <- matrix(c(4,2,1,0,1,0,0,0,1), byrow=TRUE, ncol=3) %*% c(1-t2,t2-t3,t3)
pi <- pi/sum(pi)
cnStates[[1]][,"P.m.sX"] <- pi
rho=0.01
cnStates[[1]][,"power.m.s"] <- 1-pbetabinom(2, size=c, prob=cnStates[[1]][,"f"], rho=rho )

bb$timing_param <- cnStates
s <- simplify2array(mclapply(1:50, function(foo){
                    set.seed(foo)
                    v <- simulateMutations(bb, n=40)
                    bb0 <- bb
                    bb0$timing_param <- NULL
                    L <- computeMutCn(v, bb0, clusters=d, purity=purity, rho=rho, n.boot=0)
                    L$P[[1]]
                }))
boxplot(t(s[2:3,"T.m.sX",]), at=3:2, xlab="Simulated time point", names=c("t2","t3"))
points(3:2,c(t2-t3, t3), col='red', pch=19)

l <- s[2,"T.m.sX",]/(1-s[3,"T.m.sX",])
x <- seq(0,1,0.05)
plot(x[-1]+x[2]/2, as.numeric(prop.table(table(cut(l[l<1], x)))), xlab="Latency", ylab="frequency", type='h')
axis(side=1)

10 Real-time WGD & MRCA

age <- clinicalData$donor_age_at_diagnosis
names(age) <- clinicalData$icgc_donor_id

typeNa <- gsub("\t","",strsplit("Bone-Cart
                        Breast-LobularCa
                        Breast-DCIS
                        Lymph-NOS
                        Myeloid-MDS
                        Cervix-AdenoCa", "\n")[[1]])

10.1 MRCA

10.1.1 Prelim

10.1.1.1 Effective (time-averaged) genome size

Calculate effective genome size, i.e. time-averaged ploidy from mutation copy numbers

effGenome <- unlist(mclapply(finalSnv, function(vcf) {
                    w <- info(vcf)$CLS!="subclonal"
                    if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
                        w <- w & isDeaminationNoUV(vcf)
                    else
                        w <- w & isDeamination(vcf)
                    2/avgWeights(vcf[na.omit(w)])
                }))
names(effGenome) <- names(finalSnv)

10.1.1.2 Power per (sub)clone

finalPower <- sapply(names(finalBB), function(n) {
            x <- finalBB[[n]]
            f <- finalClusters[[n]]$proportion
            for(i in 1:length(x)){
                t <- x$timing_param[[i]]
                p <- t[match(f, t[,"cfi"]), "power.s"]
                if(!is.null(p)) if(all(!is.na(p))) break
            }
            if(is.null(p)) return(rep(NA, length(f)))
            return(p)
        })
plot(unlist(lapply(wccClusters[names(finalSnv)], `[[`, "n_ssms")),unlist(lapply(finalClusters[names(finalSnv)], `[[`, "n_ssms"))/ unlist(finalPower), log='xy',
        xlab="Cluster size WCC (consensus)", ylab="Cluster size MutationTime.R") 

10.1.1.3 Branch lengths

The following calculates the length of the trunk (clonal mutations) and the depth of the MRCA, scaled by power and using a branching subclonal phylogeny.

branchDeam <- t(simplify2array(mclapply(finalSnv, function(vcf) {
                            n <- meta(header(vcf))$META["ID",]
                            if(donor2type[sample2donor[n]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            p <- info(vcf)$pSub[w]; 
                            n.subclonal <- aggregate(p, list(info(vcf)$CNF[w]), sum, na.rm=TRUE)
                            m <- apply(abs(outer(n.subclonal$Group.1, finalClusters[[n]]$proportion, `-`)),1,which.min) # Match to subclones
                            p.subclonal <- finalPower[[n]][m] # Power of subclones
                            b.subclonal <- n.subclonal$x %*% (n.subclonal$Group.1 / p.subclonal) / max(n.subclonal$Group.1) # Subclonal branch, power adjusted & 1/f-scaled
                            b.clonal <- sum(1-p, na.rm=TRUE)/finalPower[[n]][1] # Clonal branch (trunk), power adjusted & 1/f-scaled
                            c(b.subclonal, b.clonal)})))

d <- droplevels(donor2type[sample2donor[names(finalSnv)]])
typesSubclones <- setdiff(levels(d), c(typeNa, names(which(table(d)<5))))

nClones <- sapply(finalClusters, nrow)

Comparison to linear branching

branchDeamLinear <- t(simplify2array(mclapply(finalSnv, function(vcf) {
                            if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            n <- meta(header(vcf))$META["ID",]
                            if(donor2type[sample2donor[n]]=="Skin-Melanoma")
                                w <- isDeaminationNoUV(vcf)
                            else
                                w <- isDeamination(vcf)
                            if(sum(w)==0) return(c(0,0))
                            p <- info(vcf)$pSub[w]; 
                            n.subclonal <- aggregate(p, list(info(vcf)$CNF[w]), sum, na.rm=TRUE)
                            m <- apply(abs(outer(n.subclonal$Group.1, finalClusters[[n]]$proportion, `-`)),1,which.min) # Match to subclones
                            p.subclonal <- finalPower[[n]][m] # Power of subclones
                            b.subclonal <- n.subclonal$x %*% (1 / p.subclonal)  # Subclonal branch, power adjusted 
                            b.clonal <- sum(1-p, na.rm=TRUE)/finalPower[[n]][1] # Clonal branch (trunk), power adjusted
                            c(b.subclonal, b.clonal)})))

Plot

f <- (branchDeam[,1] / finalPloidy) / rowSums(branchDeam / cbind(finalPloidy, effGenome))
l <- (branchDeamLinear[,1]/ finalPloidy)/rowSums(branchDeamLinear / cbind(finalPloidy, effGenome))
t <- donor2type[sample2donor[names(finalSnv)]]
plot(f, l, xlab="Subclonal branch length (branching)", ylab="Subclonal branch length (linear)", pch=21, bg=tissueColors[t], col=tissueBorder[t], cex=tissueCex[t])
abline(0,1, lty=2)

quantile(l/f, na.rm=TRUE)
##        0%       25%       50%       75%      100% 
##  1.000000  1.230433  1.787160  2.324245 18.979107
quantile(l, na.rm=TRUE)
##         0%        25%        50%        75%       100% 
## 0.00000000 0.01893107 0.09696972 0.27966436 0.98292792
quantile(f, na.rm=TRUE)
##          0%         25%         50%         75%        100% 
## 0.000000000 0.009730081 0.045141939 0.135827609 0.955712890

10.1.2 Mutation rates

Analyse relation to age, exclude hypermutators and samples with tumour in normal 1%.

rateDeam <- cc <- list()
remove <- "8454fe53-869d-41c8-b0c8-a7929d00eec3" # a cell line, add more samples in the following
par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
for(n in typesSubclones){
    i <- d==n
    tt0 <- branchDeam[i,]/cbind(finalPloidy[i], effGenome[i]) / 3#cbind(nClones[i]-1, 1)/3 # 3Gb Haploid genome
    tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
    yy <- rowSums(tt0)
    a <- age[sample2donor[names(finalSnv)[i]]]
    xx <- a
    r <- yy/xx 
    m <- median(r[TiN[names(xx)] <= 0.01 & ! is.na(TiN[names(xx)])],na.rm=TRUE)
    rateDeam[[n]] <- r
    try({
                w <- (r-m)^2/m^2 <= 2^2 & TiN[names(xx)] <= 0.01 & ! is.na(TiN[names(xx)])
                remove <- c(remove, names(which(!w)))
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=NA, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,pmin(1000,max(yy, na.rm=TRUE))), xlim=c(0,max(age, na.rm=TRUE)),  cex.main=1)
                #par(xpd=NA)
                #segments(x0=0,y0=0, xx, yy, col=tissueLines[n], lty=tissueLty[n])
                points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                abline(0, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
                #print(paste(n,cor(xx[w],yy[w],use='c'), cor(xx[w],tt0[w,] %*% c(0.2,1), use='c'), sep=": "))
                l <- lm(yy~xx, data=data.frame(yy=yy[w],xx=xx[w], row.names=as.character(seq_along(yy[w]))))
                f <- (summary(l))
                p <- predict(l,newdata=data.frame(xx=seq(0,100,1)), se=TRUE)
                polygon(c(seq(0,100,1),rev(seq(0,100,1))), c(p$fit - 2*p$se.fit, rev(p$fit+2*p$se.fit)), border=tissueBorder[n], col=paste0(tissueColors[n],"44"))
                v <- which(!is.na(xx[w]*yy[w]))
                cc[[n]] <- cbind(f$coefficients, f$cov.unscaled * f$sigma^2, coef(nnls::nnls(cbind(1,xx[w][v]), yy[w][v])))
            })
}
## Warning in predict.lm(l, newdata = data.frame(xx = seq(0, 100, 1)), se = TRUE): prediction from a rank-deficient fit may
## be misleading
## Warning in .Method(..., deparse.level = deparse.level): number of rows of result is not a multiple of vector length (arg
## 3)
n <- names(rateDeam)
qRateDeam <- sapply(rateDeam, function(r){
            m <- median(r[TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])],na.rm=TRUE)
            w <- (r-m)^2/m^2 <= 2^2 & TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])
            quantile(r[w], na.rm=TRUE)})
plot(sapply(rateDeam, median, na.rm=TRUE), pch=NA , ylab="SNVs/Gb/yr", main="CpG>TpG rate", ylim=c(0, max(qRateDeam)), cex.main=1, xaxt='n', xlab="Tumour type")
segments(seq_along(rateDeam),qRateDeam["0%",],seq_along(rateDeam), qRateDeam["100%",], col=tissueLines[n], lty=1)
points(sapply(rateDeam, median, na.rm=TRUE), pch=21, col=tissueBorder[n], bg=tissueColors[n])

length(remove)
## [1] 743

Rates as barplot

par(mar=c(6,3,1,1))
o <- order(qRateDeam["50%",])
barplot(qRateDeam["50%",][o], col=tissueColors[colnames(qRateDeam)][o], border=tissueLines[colnames(qRateDeam)][o], las=2,names.arg=rep("",ncol(qRateDeam)) , ylab="CpG>TpG rate [SNVs/Gb/yr]", ylim=c(0, max(qRateDeam))) -> b
mg14::rotatedLabel(b, labels=colnames(qRateDeam)[o])
segments(b, qRateDeam["50%",][o], b, qRateDeam["100%",][o], col=tissueLines[colnames(qRateDeam)][o], lwd=2)
segments(b, qRateDeam["0%",][o], b, qRateDeam["50%",][o], col=tissueBorder[colnames(qRateDeam)][o], lwd=2)

Pan-can

tt0 <- branchDeam/cbind(finalPloidy, effGenome) / cbind(nClones-1, 1)/3 # 3Gb Haploid genome
tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
m <- sapply(rateDeam, function(r){m <- median(r[TiN[sample2donor[names(r)]] <= 0.01 & ! is.na(TiN[sample2donor[names(r)]])],na.rm=TRUE)})
s <- rowSums(tt0)#/m[as.character(donor2type[sample2donor[names(finalSnv)]])] 
s[remove] <- NA
t <- donor2type[sample2donor[names(finalSnv)]]
x <- age[sample2donor[names(finalSnv)]]
plot(x,s, bg=tissueColors[t], pch=21, ylim=c(0,1000), col=tissueBorder[t], cex=tissueCex[t]*2/3, lwd=0.25, xlab="Age", ylab="SNVs/Gb")
p <- predict(loess(s~x), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

#s <- 12/8; dev.copy2pdf(file="timeSubcloneAgePancan.pdf", width=2*s, height=2*s, pointsize=8*s)

Positive intercept?

a <- simplify2array(cc[!names(cc) %in% c("Myeloid-AML","Bone-Epith")])
all(a[1,1,] + 2*a[1,2,]>0 )
## [1] TRUE

Positive slope?

all(na.omit(a[2,1,] + 2*a[2,2,]>0))
## [1] TRUE
plot(a[1,1,], a[2,1,], col=tissueColors[dimnames(a)[[3]]], pch=NA, xlab="Offset", ylab="SNVs/Gb/yr")
segments(a[1,1,], a[2,1,] - a[2,2,],a[1,1,], a[2,1,]+a[2,2,], col=tissueLines[dimnames(a)[[3]]], pch=19)
segments(a[1,1,]-a[1,2,], a[2,1,], a[1,1,]+a[1,2,], a[2,1,], col=tissueLines[dimnames(a)[[3]]], pch=19)
points(a[1,1,], a[2,1,], pch=21, bg=tissueColors[dimnames(a)[[3]]], col=tissueLines[dimnames(a)[[3]]])
abline(h=0, lty=3)
abline(v=0, lty=3)

Fraction of mutations due to linear accumulation

par(mar=c(6,3,1,1))
ma <- sapply(split(age, donor2type[names(age)]), median, na.rm=TRUE)
fm <- pmax(a[2,7,],0)*ma[dimnames(a)[[3]]]/(pmax(0,a[2,7,])*ma[dimnames(a)[[3]]] + pmax(0,a[1,7,]))*100
o <- order(fm)
fmq <- sapply(names(fm), function(n){
            aa <- mvtnorm::rmvnorm(10000, mean=a[,1,n], sigma=a[,5:6,n] )
            aa <- aa[aa[,1]>=0 & aa[,2]>=0,]
            quantile(pmax(aa[,2],0)*ma[n]/(pmax(0,aa[,2])*ma[n] + pmax(0,aa[,1])), c(0.025, 0.975))
        }) *100
barplot(fm[o], col=tissueColors[dimnames(a)[[3]]][o], border=tissueLines[dimnames(a)[[3]]][o], las=2,names.arg=rep("",length(fm)) , ylab="Age-attributed mutations [%]") -> b
mg14::rotatedLabel(b, labels=names(fm[o]))
segments(b, fm[o], b, fmq[2,o], col=tissueLines[dimnames(a)[[3]]][o], lwd=2)
segments(b, fmq[1,o], b, fm[o], col=tissueBorder[dimnames(a)[[3]]][o], lwd=2)
abline(h=min(fmq[2,]))
abline(h=max(fmq[1,]))

10.1.3 Hierarchical Bayesian models of deamination rates

Prepare data

library(rstan)
## Loading required package: ggplot2
## Loading required package: StanHeaders
## rstan (Version 2.17.3, GitRev: 2e1f913d3ca3)
## For execution on a local, multicore CPU with excess RAM we recommend calling
## options(mc.cores = parallel::detectCores()).
## To avoid recompilation of unchanged Stan programs, we recommend calling
## rstan_options(auto_write = TRUE)
y <- Reduce("c",rateDeam)
y <- y[!names(y) %in% remove]
x <- age[sample2donor[names(y)]]
y <- y*x
t <- donor2type[sample2donor[names(y)]]
d <- data.frame(x,y,t)
df <- d
df <- df[rowSums(is.na(df))==0,]
tt <- model.matrix(~droplevels(t)-1, data=df)

data <- list(n = nrow(df),
        p = ncol(tt),
        y = df$y,
        x = tt * df$x,
        t = tt
)

Model definition for stan

data {
  int<lower=0> n;       // numbr of observations
  int<lower=0> p;          // number of types
  vector<lower=0>[n] y;    // mutations
  matrix[n,p] x;        // age
  matrix[n,p] t;        // tumour type
}

parameters {
  real<lower=0> sigma; // const. variance 
  real<lower=0> tau; // time-dep variance
  real<lower=0> alpha;      // alpha for slope
  real<lower=0> beta;  // beta for slope
  real<lower=0> gamma;
  real<lower=0> delta;
  vector<lower=0>[p] offset;
  vector<lower=0>[p] slope;
}

transformed parameters {
  vector[n] mu;
  vector[n] nu;
  vector[p] ones;
  ones = rep_vector(1, p);
  mu = x * slope + t * offset;
  nu = sqrt( square(x * ones)  * tau^2 + sigma^2);
}

model {
 slope ~ gamma(alpha, beta);
 offset ~ gamma(gamma, delta);
 y ~ normal(mu, nu); 
}

Fit model

fit <- stan(
        file = "PCAWG-rates.stan",  # Stan program
        data = data,            # named list of data
        chains = 1,             # number of Markov chains
        warmup = 1000,          # number of warmup iterations per chain
        iter = 2000,            # total number of iterations per chain
        cores = 1,              # number of cores 
        refresh = 1000,         # show progress every 'refresh' iterations
        open_progress=FALSE,
        seed=42
)
## In file included from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/config.hpp:39:0,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/math/tools/config.hpp:13,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/var.hpp:7,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/gevv_vvv_vari.hpp:5,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core.hpp:12,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/mat.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/src/stan/model/model_header.hpp:4,
##                  from file87c5335a6124.cpp:8:
## /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/BH/include/boost/config/compiler/gcc.hpp:186:0: warning: "BOOST_NO_CXX11_RVALUE_REFERENCES" redefined [enabled by default]
##  #  define BOOST_NO_CXX11_RVALUE_REFERENCES
##  ^
## <command-line>:0:0: note: this is the location of the previous definition
## In file included from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core.hpp:44:0,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/mat.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math.hpp:4,
##                  from /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/src/stan/model/model_header.hpp:4,
##                  from file87c5335a6124.cpp:8:
## /homes/mg14/R/x86_64-redhat-linux-gnu-library/3.3/StanHeaders/include/stan/math/rev/core/set_zero_all_adjoints.hpp:14:17: warning: ‘void stan::math::set_zero_all_adjoints()’ defined but not used [-Wunused-function]
##      static void set_zero_all_adjoints() {
##                  ^
## 
## SAMPLING FOR MODEL 'PCAWG-rates' NOW (CHAIN 1).
## 
## Gradient evaluation took 0.01 seconds
## 1000 transitions using 10 leapfrog steps per transition would take 100 seconds.
## Adjust your expectations accordingly!
## 
## 
## Iteration:    1 / 2000 [  0%]  (Warmup)
## Iteration: 1000 / 2000 [ 50%]  (Warmup)
## Iteration: 1001 / 2000 [ 50%]  (Sampling)
## Iteration: 2000 / 2000 [100%]  (Sampling)
## 
##  Elapsed Time: 359.79 seconds (Warm-up)
##                326.67 seconds (Sampling)
##                686.46 seconds (Total)
## Warning: There were 6 divergent transitions after warmup. Increasing adapt_delta above 0.8 may help. See
## http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
## Warning: Examine the pairs() plot to diagnose sampling problems

Collect parameters

s <- summary(fit, pars=c("offset","slope"))$summary
ab <- array(s, dim=c(ncol(tt),2,10), dimnames=list(levels(droplevels(t)), c("a","b"), colnames(s)))

Summary plot

plot(x,y, bg=tissueColors[t], pch=21, ylim=c(0,1000), col=tissueBorder[t], cex=tissueCex[t]*2/3, lwd=0.25, xlab="Age", ylab="SNVs/Gb")
for(i in 1:nrow(ab))
    abline(ab[i,1,"50%"], ab[i,2,"50%"], col=tissueLines[levels(droplevels(t))[i]], lty=tissueLty[levels(droplevels(t))[i]])

Rate and offset

plot(ab[,1,"50%"], ab[,2,"50%"], col=tissueColors[dimnames(ab)[[1]]], pch=NA, xlab="Offset", ylab="SNVs/Gb/yr", xlim=range(ab[,1,c("2.5%","97.5%")]), ylim=range(ab[,2,c("2.5%","97.5%")]))
segments(ab[,1,"50%"], ab[,2,"2.5%"],ab[,1,"50%"], ab[,2,"97.5%"], col=tissueLines[dimnames(ab)[[1]]], pch=19)
segments(ab[,1,"2.5%"], ab[,2,"50%"],ab[,1,"97.5%"], ab[,2,"50%"], col=tissueLines[dimnames(ab)[[1]]], pch=19)
points(ab[,1,"50%"], ab[,2,"50%"], pch=21, bg=tissueColors[dimnames(ab)[[1]]], col=tissueLines[dimnames(ab)[[1]]])
abline(h=0, lty=3)
abline(v=0, lty=3)

a <- extract(fit, pars="offset")$offset
b <- extract(fit, pars="slope")$slope
colnames(a) <- colnames(b) <- levels(droplevels(t))

Overview

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
d <- droplevels(t)
for(n in levels(d)){
    i <- d==n
    yy <- y[i]
    xx <- x[i]
    m <- median(yy/xx, na.rm=TRUE)
    try({
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=21, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,pmin(1000,max(yy, na.rm=TRUE))), xlim=c(0,max(x, na.rm=TRUE)),  cex.main=1)
                #points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                abline(0, m, lty=3)
                x0 <- seq(0,100,1)
                p <- apply(sapply(x0, function(x) a[,n] + b[,n]*x), 2, quantile, c(0.025,0.975), na.rm=TRUE)
                polygon(c(x0,rev(x0)), c(p["2.5%",], rev(p["97.5%",])), border=tissueBorder[n], col=paste0(tissueColors[n],"44"))
            })
}

Fraction of mutations due to linear accumulation

q <- sapply(colnames(a), function(n){
            w <- which(t==n & !is.na(y))
            f <- sapply(w, function(j) x[j] * b[,n] / (a[,n] + x[j] * b[,n]))
            quantile(rowMeans(f), c(0.025, 0.25, .5,.75,.975))
        })*100

qPanCan=quantile(rowMeans(do.call("cbind",sapply(colnames(a), function(n){
                                    w <- which(d==n & !is.na(y))
                                    f <- sapply(w, function(j) x[j] * b[,n] / (a[,n] + x[j] * b[,n]))
                                }))),
        c(0.025, 0.25, .5,.75,.975))*100

Plot

par(mar=c(6,3,1,1))
o <- order(q["50%",])
barplot(q["50%",o], col=tissueColors[colnames(q)][o], border=tissueLines[colnames(q)][o], las=2,names.arg=rep("",length(q["50%",])) , ylab="Age-attributed mutations [%]", ylim=c(0,100)) -> b
mg14::rotatedLabel(b, labels=names(q["50%",o]))
segments(b, q["50%",][o], b, q["97.5%",o], col=tissueLines[colnames(q)][o], lwd=2)
segments(b, q["2.5%",o], b, q["50%",][o], col=tissueBorder[colnames(q)][o], lwd=2)
abline(h=min(q["97.5%",]), lty=3)
abline(h=max(q["2.5%",]), lty=3)

#abline(h=qPanCan["50%"], lty=4)

Qualitative behaviour, simulating 0-15yrs with 5x acceleration

set.seed(42)
x <- df$x
a <-  runif(length(x), pmax(0.5, 1-15/x), 1) #
r <- rgamma(length(x), 10, 10)
y <- rpois(length(x), (a + (1-a)*5) * r * x * 6 * 0.2)/6
y[x < 40] <- NA
plot(x,y, ylim=c(0,max(y, na.rm=TRUE)), xlab="Age", ylab="SNVs/Gb", pch=21, bg="grey", lwd=0.5)
f <- lm(y~x)
summary(f)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -16.580  -5.146  -0.878   4.171  31.728 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.31347    1.01438   5.238 1.82e-07 ***
## x            0.21375    0.01583  13.504  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.311 on 1696 degrees of freedom
##   (280 observations deleted due to missingness)
## Multiple R-squared:  0.09708,    Adjusted R-squared:  0.09655 
## F-statistic: 182.4 on 1 and 1696 DF,  p-value: < 2.2e-16
c <- coef(f)
abline(c)

mean(c[1] / (c[1]+ x*c[2]), na.rm=TRUE)
## [1] 0.3297523

10.1.4 Timing

Acceleration values to simulate

accel <- c(1,2.5,5,7.5,10)
names(accel) <- paste0(accel, "x")

The actual timing

set.seed(42)
d <- droplevels(donor2type[sample2donor[names(finalSnv)]])

computeSubclonesTimeAbs <- function(l, b) {
    i <- d==l
    tt0 <- b[i,]/cbind(finalPloidy[i], effGenome[i]) #/ cbind(nClones[i]-1, 1)
    resB <- sapply(1:1000, function(foo){ ## Assess the impact of Poisson fluctuations on numbers
                tt <- matrix(rpois(length(tt0), lambda=tt0), ncol=ncol(tt0))
                res <- sapply(accel, function(a)  tt[,1]/a/rowSums(tt/rep(c(a,1), each=nrow(tt)))) * age[sample2donor[names(finalSnv)[i]]]
                colnames(res) <- paste0(accel, "x")
                #res[res==0] <- NA
                res}, simplify='array')
    res <- sapply(accel, function(a)  tt0[,1]/a/rowSums(tt0/rep(c(a,1), each=nrow(tt0)))) * age[sample2donor[names(finalSnv)[i]]]
    colnames(res) <- paste0(accel, "x") 
    resCI <- apply(resB,1:2, quantile, c(0.1,0.9), na.rm=TRUE)
    arr <- abind::abind(res, resCI, along=1)
    rownames(arr)[1] <- "hat"
    arr <- aperm(arr, c(2,1,3))
    tt0[is.infinite(tt0)|is.nan(tt0)] <- 0
    r <- which(rowSums(b[i,]) < 50 ) ## Exclude samples with less than 50 subs 
    arr[r,,] <- NA
    return(arr)
}

subclonesTimeAbs <- mclapply(typesSubclones, computeSubclonesTimeAbs, b=branchDeam)
subclonesTimeAbsLinear <- mclapply(typesSubclones, computeSubclonesTimeAbs, b=branchDeamLinear)
names(subclonesTimeAbsLinear) <- names(subclonesTimeAbs) <- typesSubclones

guessAccel <- sapply(subclonesTimeAbs, function(x) "5x")
guessAccel["Ovary-AdenoCa"] <- guessAccel["Liver-HCC"] <- "7.5x"
guessAccel[grep('CNS', names(guessAccel))] <- "2.5x"

Plot

u <- setdiff(names(finalSnv)[uniqueSamples], remove)
par( mar=c(7,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
qSubclone <- sapply(subclonesTimeAbs, function(x) apply(x[,"hat",][rownames(x)%in%u,,drop=FALSE], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
a <- "5x"
subclonesTimeAbsType <- sapply(names(subclonesTimeAbs), function(n) {x <- subclonesTimeAbs[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
m <- diag(qSubclone["50%",guessAccel[dimnames(qSubclone)[[3]]],])#t[1,3,]
names(m) <- dimnames(qSubclone)[[3]]
m[sapply(subclonesTimeAbsType, function(x) sum(!is.na(x[,1]))) < 5] <- NA
o <- order(m, na.last=NA)
plot(NA,NA, xlim=c(0.5,length(m[o])), ylab="Years before diagnosis", xlab="", xaxt="n", yaxs="i", ylim=c(0,30))
abline(h=seq(10,20,10), col="#DDDDDD", lty=3)
x <- seq_along(m[o])
mg14::rotatedLabel(x, labels=names(sort(m)))
for(i in seq_along(o))try({
                n <- names(m)[o[i]]
                f <- function(x) x/max(abs(x))
                a <- guessAccel[n]
                bwd <- 0.8/2
                j <- if(length(na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]))>1) f(mg14::violinJitter(na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]))$y)/4 + i else i
                tpy <- 2
                segments(j, na.omit(subclonesTimeAbsType[[o[i]]][,"90%"]), j, na.omit(subclonesTimeAbsType[[o[i]]][,"10%"]), col=mg14::colTrans(tissueLines[n],tpy))
                points(j, na.omit(subclonesTimeAbsType[[o[i]]][,"hat"]), pch=21, col=mg14::colTrans(tissueBorder[n], tpy), bg=mg14::colTrans(tissueColors[n],tpy), 
                        cex=tissueCex[n]*2/3, lwd=1)
                rect(i-bwd,qSubclone["25%",a,n],i+bwd,qSubclone["75%",a,n], border=tissueLines[n],  col=paste(tissueColors[n],"44", sep=""))
                segments(i-bwd,qSubclone["50%",a,n],i+bwd,qSubclone["50%",a,n],col=tissueLines[n], lwd=2)
                segments(i,qSubclone["75%",a,n],i,qSubclone["95%",a,n],col=tissueLines[n], lwd=1.5)
                segments(i,qSubclone["5%",a,n],i,qSubclone["25%",a,n],col=tissueLines[n], lwd=1.5)
                f <- function(x) x/max(abs(x))
            })

#par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeSubclone.pdf", width=6*s, height=3.5*3/5*s, pointsize=8*s)

sapply(subclonesTimeAbs, nrow)
##     Biliary-AdenoCa         Bladder-TCC         Bone-Benign          Bone-Epith      Bone-Osteosarc      Breast-AdenoCa 
##                  35                  23                  16                  10                  38                 198 
##          Cervix-SCC             CNS-GBM         CNS-Medullo           CNS-Oligo       CNS-PiloAstro    ColoRect-AdenoCa 
##                  18                  41                 146                  18                  89                  60 
##         Eso-AdenoCa            Head-SCC        Kidney-CCRCC        Kidney-ChRCC       Kidney-PapRCC           Liver-HCC 
##                  98                  57                 111                  45                  33                 326 
##        Lung-AdenoCa            Lung-SCC          Lymph-BNHL           Lymph-CLL         Myeloid-AML         Myeloid-MPN 
##                  38                  48                 107                  95                  11                  55 
##       Ovary-AdenoCa        Panc-AdenoCa      Panc-Endocrine       Prost-AdenoCa       Skin-Melanoma  SoftTissue-Leiomyo 
##                 113                 241                  85                 286                 107                  15 
## SoftTissue-Liposarc     Stomach-AdenoCa         Thy-AdenoCa      Uterus-AdenoCa 
##                  19                  75                  48                  51

Comparison of branching v linear

subclonesTimeAbsTypeLinear <- sapply(names(subclonesTimeAbsLinear), function(n) {x <- subclonesTimeAbsLinear[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
qSubcloneLinear <- sapply(subclonesTimeAbsLinear, function(x) apply(x[,"hat",][rownames(x)%in%u,,drop=FALSE], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
n <- diag(qSubcloneLinear["50%",guessAccel[dimnames(qSubcloneLinear)[[3]]],])#t[1,3,]

par( mar=c(5,3,3,10), mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="n", xpd=FALSE, las=1)
plot(c(rep(1, length(m)), rep(2, each=length(n))), c(m,n), bg=tissueColors[c(names(m), names(n))], pch=21, cex=1, xaxt="n", ylab="Years after MRCA", xlab="", xlim=c(0.5,2.5), ylim=c(0, max(n, na.rm=TRUE)))
segments(rep(1, each=length(m)), m, rep(2, each=length(n)), n,col=tissueLines[names(m)], lty= ifelse(sapply(subclonesTimeAbsType, nrow) <= 5, 3, tissueLty[names(m)]))
o <- order(n, na.last=NA)
y0 <- n[o]
y1 <- mg14:::mindist(n[o], diff(par('usr')[3:4])/30)
par(xpd=NA)
mtext(names(m)[o], at=y1, side=4 )
segments(2.1,y0,2.2,y0)
segments(2.2,y0,2.3,y1)
segments(2.3,y1,2.4,y1)
mg14::rotatedLabel(1:2, labels=c("Branching","Linear"))

Numbers per decade

yy <- do.call("rbind",subclonesTimeAbsType)
yy <- yy[setdiff(rownames(yy), remove),"hat"]
table(cut(yy, seq(0,60,10)))
## 
##  (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] 
##    1863      27       4       2       1       0

10.2 WGD

10.2.1 Functions

Calculate relative timing estimates based on deaminations.

computeWgdParamDeam <- function(vcf, bb, clusters, purity){
    # 1. Find segments compatible with WGD
    min.dist <- 0.05
    m <- findMainCluster(bb)
    l <- pmin(bb$time.lo, bb$time - min.dist)
    u <- pmax(bb$time.up, bb$time + min.dist)
    o <- which(l <= m & u >= m)
    
    # 2. Find deaminations in compatible segments
    w <- which(info(vcf)$MajCN==2 & sapply(info(vcf)$CNID, length)==1 & isDeamination(vcf) & vcf %over% bb[o])
    if(donor2type[sample2donor[meta(header(vcf))$META["ID",]]]=="Skin-Melanoma")
        w <- intersect(w, which(isDeaminationNoUV(vcf)))
    v <- vcf[w]
    if(nrow(v)<=100) return(NULL) # At least 100 SNVs
    seqnames(rowRanges(v)) <- factor(3-info(v)$MinCN, levels=seqlevels(v))
    v <- sort(v)
    
    # 3. Merged CN segments
    b <- GRanges(1:3, IRanges(rep(1,3),rep(max(end(v)),3)), copy_number=4:2, major_cn=2, minor_cn=2:0, clonal_frequency=as.numeric(purity))
    
    # 4. Calculate times
    l <- computeMutCn(v, b, clusters, purity, isWgd=TRUE, n.boot=200, rho=0.01, xmin=3)
    b$n.snv_mnv <- l$n <- table(factor(info(v)$MinCN, levels=2:0))
    l$time <- bbToTime(b, l$P)
    return(l)
}

10.2.2 Timing

Takes ~1h.

wgdParamDeam <- mclapply(names(finalSnv)[isWgd], function(ID){
            try(computeWgdParamDeam(finalSnv[[ID]], finalBB[[ID]], clusters=finalClusters[[ID]], purity=finalPurity[ID]))
        })
names(wgdParamDeam) <- names(finalSnv)[isWgd]

Samples with insufficient data

void <- sapply(wgdParamDeam, function(x) is.null(x) | class(x)=="try-error")

Some checks

t <- sapply(wgdParamDeam[!void], function(x) {r <- as.matrix(x$time[,2:4]); rownames(r) <- x$time[,1];r}, simplify='array')
pairs(t(t[,"time",]))

Calculate acceleration-adjusted times

wgdTimeDeamAcc <- simplify2array(mclapply(names(wgdParamDeam[!void]), function(n) {
                    x <- wgdParamDeam[!void][[n]]
                    
                    T.clonal <- as.matrix(x$time[,2:4]) # Time of WGD as fraction of clonal                 
                    
                    n.subclonal <- aggregate(x$D[,"pSub"], list(x$D[,"CNF"]), sum)
                    m <- match(n.subclonal$Group.1, finalClusters[[n]]$proportion)
                    p.subclonal <- x$power.c[m] # Power of subclones
                    b.subclonal <- n.subclonal$x %*% (n.subclonal$Group.1 / p.subclonal) / max(n.subclonal$Group.1) # Subclonal branch, power adjusted & 1/f-scaled
                    b.clonal <- sum(1-x$D[,"pSub"])/p.subclonal['1'] # Clonal branch (trunk), power adjusted & 1/f-scaled
                    f.subclonal <- b.subclonal / (b.subclonal + b.clonal)
                    G.clonal <- sum (1-x$D$pSub)/sum((1-x$D$pSub)*x$D$MutCN/(x$D$MajCN + x$D$MinCN)) # Effective ploidy clonal, adjusted for timing
                    G.subclonal <- sum(x$D$pSub*(x$D$MajCN + x$D$MinCN))/ sum (x$D$pSub) # Final ploidy
                    if(is.nan(G.subclonal)) G.subclonal <- mean(x$D$MajCN + x$D$MinCN)
                    
                    ag <- age[sample2donor[names(finalBB)[isWgd][!void][j]]]
                    tmin <- max(0.5, 1-15/ag) # 15yrs or 50%, whatever smaller (median ~ 0.75 mutation time)
                    if(is.na(tmin)) tmin <- 0.8
                    ta=seq(tmin,1,l=20)
                    
                    .correctAccel <- function(T.clonal, f.subclonal, G.clonal, G.subclonal, ta, a){ # Helper function to correct accel a at clonal time ta
                        t1 <- T.clonal + (1-T.clonal) *(a-1)/a*ta #acc before dup
                        t2 <- T.clonal * (ta + a*(1-ta)) ## after
                        T.clonal.adj <- pmin(t1, t2) # as fraction of clonal
                        a.clonal <- ta + (1-ta)*a # effective rate, avg over clonal
                        T.subclonal.abs <- f.subclonal / G.subclonal / a
                        T.clonal.abs <- (1-f.subclonal) / G.clonal/ a.clonal
                        T.clonal.abs <- T.clonal.abs / (T.clonal.abs + T.subclonal.abs) # as fraction of all mutations
                        return(c(T.WGD=T.clonal.adj * T.clonal.abs, T.MRCA=T.clonal.abs))
                    }
                    
                    .correctAccelRand <- function(T.clonal, f.subclonal, G.clonal, G.subclonal, ta=seq(0.8,1,0.01), a=seq(1,10,1)){ # Helper to calculate range of accel a and times
                        sapply(ta, function(taa) sapply(a, function(aa) .correctAccel(T.clonal, f.subclonal, G.clonal, G.subclonal, taa, aa)), simplify='array')
                    }
                    
                    res <- apply(T.clonal, 1:2, .correctAccelRand, f.subclonal, G.clonal, G.subclonal, a=accel, ta=seq(tmin,1,l=20))
                    dim(res) <- c(2, length(accel), length(ta), dim(res)[-1])
                    return(res)
                    
                }))
dimnames(wgdTimeDeamAcc)[1:2] <- list(c("T.WGD","T.MRCA"), names(accel))
dimnames(wgdTimeDeamAcc)[[5]] <- colnames(wgdParamDeam[[1]]$time)[2:4] 
dimnames(wgdTimeDeamAcc)[[4]] <- levels(finalBB[[1]]$type)[c(3,1,2)]
dimnames(wgdTimeDeamAcc)[[6]] <- names(wgdParamDeam[!void])

n <- dimnames(wgdTimeDeamAcc)[[6]]
d <- droplevels(donor2type[sample2donor[n]])
s <- setdiff(levels(d), c(typeNa, names(which(table(d)<3))))

Calculate real time by scaling with age at diagnosis

f <- function(n, mu, a, b){ ## asymmetric normal to interpolate CIs of the timing estimates
    r <- rnorm(n, sd=a)
    w <- which(r>0)
    r[w] <- r[w]*(b/a)[w]
    return(r + mu)
}
wgdTimeAbs <- sapply(s, function(l) {
            set.seed(42)
            i <- d==l & ! n %in% c(rownames(purityPloidy)[purityPloidy$wgd_uncertain])
            
            ## absolute time by multiplying with age at diagnosis
            absTimeSeg <- aperm((1-wgdTimeDeamAcc["T.WGD",,,,,i]) * rep(age[sample2donor[n]][i], each = prod(dim(wgdTimeDeamAcc)[c(2,3,4,5)])))
            w <- t(sapply(wgdParamDeam[n[i]], `[[`, "n")) #number of SNV as weights
            
            ## remove NA due to zero mutations
            for(c in 1:3)
                absTimeSeg[,,c,,][is.na(absTimeSeg[,,c,,]) & w[,c]==0] <- 0
            
            ## weighted average over 2+0, 2+1 and 2+2 segments
            absTime <- (absTimeSeg[,,1,,] * w[,1] + absTimeSeg[,,2,,] * w[,2] + absTimeSeg[,,3,,] * w[,3]) / rowSums(w) 
            rownames(absTime) <- n[i]
            
            ## Median over acceleration onset
            absTimeMed <- apply(absTime, c(1,2,4), median, na.rm=TRUE) 
            colnames(absTimeMed) <- c("hat","up","lo")
            
            ## Simulate distribution sampling from timing onset and mutation time CI 
            ts <- sapply(1:1000, function(foo) {ax <- sample(1:20,1); matrix(f(length(absTime[,"time",ax,]),a=abs(absTime[,"time",ax,] - absTime[,"time.up",ax,])/2, b=abs(absTime[,"time.lo",ax,]-absTime[,"time",ax,])/2, mu=absTime[,"time",ax,]), nrow=dim(absTime)[1])}, simplify='array')
            me <- apply(ts, 1:2, quantile, c(0.1, 0.8), na.rm=TRUE) # 80% CIs
            absTimeMed[,"lo",] <- (me[1,,])
            absTimeMed[,"up",] <- (me[2,,])
            absTimeMed[,c(1,3,2),]
        }, simplify=FALSE)

Boxplots of WGD per cancer type

par( mar=c(7,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
u <- setdiff(names(finalSnv)[uniqueSamples], remove)
qWgd <- sapply(wgdTimeAbs, function(x) apply(x[rownames(x) %in% u,"hat",], 2, quantile, c(0.05,0.25,0.5,0.75,0.95), na.rm=TRUE), simplify='array')
nWgd <- sapply(wgdTimeAbs, function(x) sum(x[rownames(x) %in% u,"hat","1x"]!=0, na.rm=TRUE))
wgdTimeAbsType <- sapply(names(wgdTimeAbs), function(n) {x <- wgdTimeAbs[[n]]; x[,,guessAccel[n]][setdiff(rownames(x),remove), 1:3, drop=FALSE]})
m <- diag(qWgd["75%",guessAccel[dimnames(qWgd)[[3]]],])#t[1,3,]
names(m) <- dimnames(qWgd)[[3]]
o <- order(m, na.last=NA)
x <- seq_along(m[o])
plot(NA,NA, xlim=c(0.5,length(m[o])), ylim=c(0,max(do.call('rbind',wgdTimeAbsType)[,1], na.rm=TRUE)+5), ylab="Years before diagnosis", xlab="", xaxt="n", yaxs="i")
abline(h=seq(10,60,10), col="#DDDDDD", lty=3)
mg14::rotatedLabel(x, labels=names(sort(m)))
for(i in seq_along(o)){
    n <- names(m)[o[i]]
    f <- function(x) x/max(abs(x))
    a <- guessAccel[n]
    j <- f(mg14::violinJitter(na.omit(wgdTimeAbsType[[o[i]]][,"hat"]))$y)/4 + i #rank(na.omit(tWgdByType[[o[i]]][,"hat"]))/2/length(na.omit(tWgdByType[[o[i]]][,"hat"]))-0.25+i #
    tpy <- if(grepl("Skin|Lung", n)) 4 else 2
    segments(j, na.omit(wgdTimeAbsType[[o[i]]][,"up"]), j, na.omit(wgdTimeAbsType[[o[i]]][,"lo"]), col=mg14::colTrans(tissueLines[n],tpy), lty=tissueLty[n])
    points(j, na.omit(wgdTimeAbsType[[o[i]]][,"hat"]), pch=21, col=mg14::colTrans(tissueBorder[n], tpy), bg=mg14::colTrans(tissueColors[n],tpy), 
            cex=tissueCex[n]*2/3, lwd=1)
    bwd <- 0.8/2
    rect(i-bwd,qWgd["25%",a,n],i+bwd,qWgd["75%",a,n], border=tissueLines[n],  col=paste0(tissueColors[n],"44"))
    segments(i-bwd,qWgd["50%",a,n],i+bwd,qWgd["50%",a,n],col=tissueLines[n], lwd=2)
    segments(i,qWgd["75%",a,n],i,qWgd["95%",a,n],col=tissueLines[n], lwd=1.5)
    segments(i,qWgd["5%",a,n],i,qWgd["25%",a,n],col=tissueLines[n], lwd=1.5)
}

par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeWgd.pdf", width=4*s, height=3.5*s, pointsize=8*s)

Plot extremely early samples

t <- do.call("rbind", wgdTimeAbsType)
o <- order(t[,"hat"], na.last=NA)
for(n in rownames(t)[tail(o, 20)])
    plotSample(n, title=paste0(sub("-.+","",n),", ", donor2type[sample2donor[n]], ", ",round(t[n,"hat"]),"yr"))

Numbers per decade

yy <- do.call("rbind",wgdTimeAbsType)
yy <- yy[setdiff(rownames(yy), remove),"hat"]
table(cut(yy, seq(0,60,10)))
## 
##  (0,10] (10,20] (20,30] (30,40] (40,50] (50,60] 
##     389      86      47      20      11       9

WGD time v age at diagnosis

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
for(i in seq_along(wgdTimeAbsType)){
    n <- names(wgdTimeAbsType)[i]
    y <- wgdTimeAbsType[[n]][,"hat"]
    x <- age[sample2donor[names(y)]]
    plot(x,x-y, pch=NA, bg=tissueColors[n], col=tissueBorder[n], xlab="Age [yr]", ylab="WGD [yr]", cex=tissueCex[n], xlim=c(0,90), ylim=c(0,90))
    segments(x, y0=x-wgdTimeAbsType[[n]][,"up"],y1=x-wgdTimeAbsType[[n]][,"lo"],col=tissueLines[n])
    points(x,x-y, pch=21, bg=tissueColors[n], col=tissueBorder[n], cex=tissueCex[n])
#   d <- density(na.omit(x), bw="SJ", from=0)
#   lines(d$x,d$y*100,col=tissueLines[n], lty=tissueLty[n])
#   d <- density(na.omit(x-y), bw="SJ", from=0)
#   lines(d$y*100, d$x,col=tissueLines[n], lty=tissueLty[n])
    rug(x, col=tissueLines[n],)
    rug(x-y, side=2, col=tissueLines[n])
    title(main=n, line=0, font.main=1, cex.main=1)
    abline(0,1, lty=3)
}

10.2.2.1 Deaminations v all mutations

Scatter

t <- sapply(wgdParamDeam[!void], function(x) x$time$time)
plot(timingInfo[colnames(t),'timeCoamp'], 
        colMeans(t), 
        cex=sqrt(nSub[colnames(t)]/10000), 
        pch=21,bg=tissueColors[donor2type[sample2donor[colnames(t)]]], 
        col=tissueBorder[donor2type[sample2donor[colnames(t)]]],
        xlab="time [all mutations]",
        ylab="time [CpG>TpG]")
abline(0,1, lty=3)

Box

par(mar=c(6,4,1,1), xaxs='i')
boxplot(timingInfo[colnames(t),'timeCoamp'] - colMeans(t) ~ droplevels(donor2type[sample2donor[colnames(t)]]), 
        col=tissueColors[levels(droplevels(donor2type[sample2donor[colnames(t)]]))],
        na.rm=TRUE, las=2,
        lty=1,
        staplewex=0,
        pch=16,
        cex=0.8,
        ylab='time [all] - time [CpG>TpG]',
        names=NA
)
mg14::rotatedLabel(labels=levels(droplevels(donor2type[sample2donor[colnames(t)]])))
abline(h=0, lty=3)

10.2.2.2 Assessment of absolute mutation counts

Number of deaminatinos in 2:2 regions

nDeam22 <- sapply(wgdParamDeam[!void], function(x) if(!is.null(x$n)) as.numeric(x$n[1]) else NA)
w22 <- sapply(finalBB[isWgd][!void], function(bb) {
            w <- bb$major_cn==2 & bb$minor_cn==2 & !duplicated(bb)
            sum(as.numeric(width(bb)[w]), na.rm=TRUE)})
nDeam22 <- nDeam22/w22*1e9

Fraction of deam on 1 and 2 copies

d <- nDeam22 *  t(sapply(wgdParamDeam[!void], function(x) if(!is.null(x$P)) x$P[[1]][1:2,"P.m.sX"] else c(NA,NA)))
d[rownames(d) %in% remove] <- NA

Unadjusted time (inc. of subclonal mutations)

t0 <- colMeans(wgdTimeDeamAcc["T.WGD","1x",1,,"time",],na.rm=TRUE) 
names(t0) <- dimnames(wgdTimeDeamAcc)[[6]]

Plot time v early and total number of mutations

y <- d[names(t0),]/6
x <- t0
t <- donor2type[sample2donor[names(t0)]]
plot(x,y[,2], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time", ylab="Early SNVs/Gb", log='')
p <- predict(loess(y[,2]~x, span=1), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

plot(x,y[,1]+y[,2], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time", ylab="Total SNVs/Gb", log='')
p <- predict(loess(rowSums(y)~x, span=1), newdata=sort(x, na.last=NA), se=TRUE)
r <- function(x) c(x, rev(x))
polygon(r(sort(x, na.last=NA)), c(p$fit+2*p$se, rev(p$fit-2*p$se)), col="#00000044", border=NA)
lines(sort(x, na.last=NA),p$fit)

#s <- 12/8; dev.copy2pdf(file="nDeam22Time.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.2.3 Mutation burden

Age at diagnosis

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1, xpd=FALSE)
deamRateWgd <- list()
for(n in names(wgdTimeAbsType)){
    a <- age[sample2donor[rownames(wgdTimeAbsType[[n]])]]
    yy <- nDeam22[rownames(wgdTimeAbsType[[n]])]/(2-t0[rownames(wgdTimeAbsType[[n]])])
    xx <- a
    r <- yy/xx 
    m <- median(r,na.rm=TRUE)
    deamRateWgd[[n]] <- r
    try({
                w <- (r-m)^2/m^2 <= 2^2 
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n], pch=NA, log='', xlab="Age at diagnosis", ylab="SNVs/Gb", main=n, ylim=c(0,max(yy, na.rm=TRUE)), xlim=c(0,max(age, na.rm=TRUE)),  cex.main=1)
                par(xpd=NA)
                segments(x0=0,y0=0, xx, yy, col=tissueLines[n], lty=tissueLty[n])
                points(xx, yy, bg=tissueColors[n], col=ifelse(w,tissueBorder[n], tissueColors[n]), pch=ifelse(w,21,4))
                par(xpd=FALSE)
                #abline(l, lty=3)
                #abline(l$coef[1], l$coef[1])
                abline(0, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
            })
}
n <- names(deamRateWgd)
q <- sapply(deamRateWgd, function(r){
            m <- median(r,na.rm=TRUE)
            w <- (r-m)^2/m^2 <= 2^2 
            range(r[w], na.rm=TRUE)})
plot(sapply(deamRateWgd, median, na.rm=TRUE), pch=NA , ylab="SNVs/Gb/yr", main="CpG>TpG rate", ylim=c(0, max(q)), cex.main=1, xaxt='n', xlab="Tumour type")
segments(seq_along(deamRateWgd),q[1,],seq_along(deamRateWgd), q[2,], col=tissueLines[n], lty=1)
points(sapply(deamRateWgd, median, na.rm=TRUE), pch=21, col=tissueBorder[n], bg=tissueColors[n])

10.2.2.4 Acceleration adjustment relative to lowest quintile.

accelRelWgd <- sapply(names(wgdTimeAbs), function(n) {
            r <- rateDeam[[n]]
            x <- wgdTimeAbs[[n]]
            r0 <- quantile(r[!names(r) %in% remove], 0.20, na.rm=TRUE)
            a <- cut(pmin(pmax(1,(r/r0-0.9)/0.1),10), c(0,1.5,3.75,6.25,8.75,20), labels=c("1x","2.5x","5x","7.5x","10x"))
            print(table(a))
            names(a) <- names(r)
            ta <- sapply(rownames(x), function(ss) x[ss, "hat",a[ss]])
            ta
        })
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    5    3    1   16 
## a
##   1x 2.5x   5x 7.5x  10x 
##    7    4    0    5    7 
## a
##   1x 2.5x   5x 7.5x  10x 
##    8    5    3    2   19 
## a
##   1x 2.5x   5x 7.5x  10x 
##   39   27   52   26   40 
## a
##   1x 2.5x   5x 7.5x  10x 
##    5    5    3    4    1 
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    9   10    2   10 
## a
##   1x 2.5x   5x 7.5x  10x 
##   35   17   21    9   54 
## a
##   1x 2.5x   5x 7.5x  10x 
##   12   10   10    5   23 
## a
##   1x 2.5x   5x 7.5x  10x 
##   26   18   10   13   30 
## a
##   1x 2.5x   5x 7.5x  10x 
##   17    4    9    5   22 
## a
##   1x 2.5x   5x 7.5x  10x 
##   30   26   24   15   16 
## a
##   1x 2.5x   5x 7.5x  10x 
##    9    3    4    5   24 
## a
##   1x 2.5x   5x 7.5x  10x 
##   10    4    7    4    8 
## a
##   1x 2.5x   5x 7.5x  10x 
##   87  117   75   23   24 
## a
##   1x 2.5x   5x 7.5x  10x 
##    8    3    2    3   19 
## a
##   1x 2.5x   5x 7.5x  10x 
##   11    9   15    7    6 
## a
##   1x 2.5x   5x 7.5x  10x 
##   25   14   13   11   44 
## a
##   1x 2.5x   5x 7.5x  10x 
##   28   38   29   11    7 
## a
##   1x 2.5x   5x 7.5x  10x 
##   55   55   50   28   50 
## a
##   1x 2.5x   5x 7.5x  10x 
##   22    3    3    8   49 
## a
##   1x 2.5x   5x 7.5x  10x 
##   78   40   39   38   89 
## a
##   1x 2.5x   5x 7.5x  10x 
##   24   16   21    9   37 
## a
##   1x 2.5x   5x 7.5x  10x 
##    4    4    2    2    3 
## a
##   1x 2.5x   5x 7.5x  10x 
##    5    6    4    1    3 
## a
##   1x 2.5x   5x 7.5x  10x 
##   23    5    7    5   34 
## a
##   1x 2.5x   5x 7.5x  10x 
##   12   13    7    5   14
par(mar=c(3,3,1,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
x <- Reduce("c",accelRelWgd)
y <- Reduce("c",sapply(wgdTimeAbs, function(x) x[,"hat","5x"]))

t <- donor2type[sample2donor[names(x)]]
plot(y+runif(length(y)),x+runif(length(y)), pch=21, bg=tissueColors[t], col=tissueBorder[t], cex=tissueCex[t]*1, lwd=0.5, xlab="Time (constant acceleration)", ylab="Time (sample-specific accel.)", log='')

#s <- 12/8; dev.copy2pdf(file="accelRelWgd.pdf", width=2*s, height=2*s, pointsize=8*s)

Quantiles

par(mar=c(3,3,1,1),mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="L", xpd=FALSE, las=1)
u <- setdiff(names(finalSnv)[uniqueSamples], remove)
qAccelRelWgd <- sapply(accelRelWgd, function(x){
            quantile(x[names(x) %in% u], na.rm=TRUE)
        })
t <- colnames(qAccelRelWgd)
plot(qWgd["50%","5x",], qAccelRelWgd["50%",], pch=NA,  xlab="Time [years], constant acceleration", ylab="Time [years], sample-specific accel.", xlim=c(0,30), ylim=c(0,30))
abline(0,1, lty=3)
segments(qWgd["25%","5x",], qAccelRelWgd["50%",],qWgd["75%","5x",], qAccelRelWgd["50%",], lty=tissueLty[t], col=tissueLines[t])
segments(qWgd["50%","5x",], qAccelRelWgd["25%",],qWgd["50%","5x",], qAccelRelWgd["75%",], lty=tissueLty[t], col=tissueLines[t])
points(qWgd["50%","5x",], qAccelRelWgd["50%",], bg=tissueColors[t], pch=21,  col=tissueBorder[t], cex=tissueCex[t], lwd=0.5)

#s <- 12/8; dev.copy2pdf(file="qAccelRelWgd.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.2.5 Average rate v time

Mutations per year vs time. If the mutation rate was constant, there should be a proportional increase due to the double opportunity to mutate after WGD.

par(mfrow=c(6,6), mar=c(3,3,2,1),mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
for(n in names(wgdTimeAbsType)){
    a <- age[sample2donor[rownames(wgdTimeAbsType[[n]])]]
    yy <- nDeam22[rownames(wgdTimeAbsType[[n]])]/a
    xx <- 1-t0[rownames(wgdTimeAbsType[[n]])]#y[[n]][,"hat"]/a
    try({
                l <- lm(yy ~ xx)
                x0 <- -l$coef[2]/l$coef[1]
                #print(x0)
                plot(xx, yy, bg=tissueColors[n], col=tissueBorder[n],, pch=21, log='', xlab="1-time [mutations]", ylab="SNVs/Gb/yr", main=n, ylim=c(0,max(yy, na.rm=TRUE)), xlim=c(0,max(xx, na.rm=TRUE)), cex.main=1)
                #abline(l, lty=3)
                #abline(l$coef[1], l$coef[1])
                m <- median(yy/(1+xx),na.rm=TRUE)
                abline(m, m, lty=3)
                #lines(c(x0,2*x0), c(0,1))
            })
}

10.2.2.6 Conceptual plot

#par(mfrow=c(1,1), mar=c(3,3,1,1), mgp=c(2,0.5,0), bty="L")
x0 <- 70
y0 <- 1
a <- 5
plot(x0,y0, xlab="Time [yr]", ylab="Time [fraction of mutations]", pch=19, xlim=c(0,80), ylim=c(0,y0*1.1))
r <- seq(0.66,1,0.001)
yy <- c(0,y0*r/(a*(1-r)+r))
xx <- c(0,r)*x0
polygon(xx, yy, col="grey", border=NA)
for(i in seq(51, 341,30))
    lines(c(0,xx[i],x0), c(0,yy[i],y0), col='darkgrey')
t <- 3/5*y0
ta <- function(t0, a, ta){
    t1 <- t0 + (1-t0) *(a-1)/a*ta #acc before dup
    t2 <- t0 * (ta + a*(1-ta)) ## after
    tf <- pmin(t1, t2) # as fraction of clonal
    return(tf)
}
tf <- sapply(r, function(rr) ta(t/y0, a, rr))
tmax <- xx[which.min(abs(yy-t))]
tmin <- t/ y0*x0
lines(c(x0,x0,0), c(0,y0,y0), lty=3)
lines(c(tmax,tmax,0), c(0,t,t), lty=2)
lines(c(tmin,tmin,0), c(0,t,t), lty=2)
#d <- density(tf*x, from=tmin, to=tmax)
lines(quantile(tf, c(0.025,0.975))*x0, c(0,0), lwd=2)
points(c(tmin,median(tf)*x0), c(0,0), pch=c(1,19))
mtext(side=1, at=x0, text="Diagnosis", line=2)
text(x=0, y=t, labels="WGD", pos=4, adj=c(0,1))

#lines(d$x,d$y/max(d$y)*50)
#s <- 12/8; dev.copy2pdf(file="concept.pdf", width=2*s, height=2*s, pointsize=8*s)

10.2.2.7 Median time v accel

par(mar=c(3,3,1,1), mgp=c(2,0.5,0), tcl=-0.25, bty="L")
plot(accel, qWgd["50%",,1], type='l', lty=0, ylim=c(0,30), xlab= "CpG>TpG rate acceleration", ylab="Median occurrence [years]", yaxs="i", xaxt="n")
axis(side=1, at=accel)
for(j in 1:dim(qWgd)[3]) lines(accel, qWgd["50%",,j], type='l', col=tissueLines[dimnames(qWgd)[[3]][j]], 
            lty=ifelse(nWgd[dimnames(qWgd)[[3]][j]]<=9, 3, tissueLty[dimnames(qWgd)[[3]][j]]))

#s <- 12/8; dev.copy2pdf(file="realTimeWgdAccel.pdf", width=2*s, height=2*s, pointsize=8*s)

10.3 MRCA v WGD

Scatter of median

par( mar=c(4,3,1,1), mgp=c(2,.5,0), tcl=0.25,cex=1, bty="L", xpd=FALSE, las=1)
a <- "5x"
plot(qSubclone["50%",a,dimnames(qWgd)[[3]]], qWgd["50%",a,], col=tissueColors[dimnames(qWgd)[[3]]], pch=16, cex=2, xlab="Median time subclones", ylab="Median time WGD", xlim=c(0,5), ylim=c(0,10))

Dotplot

par( mar=c(3,3,3,10), mgp=c(2,.5,0), tcl=-0.25,cex=1, bty="n", xpd=FALSE, las=1)
w <- "50%"

x <- diag(qSubclone[w,guessAccel[dimnames(qSubclone)[[3]]],])#t[1,3,]
names(x) <- dimnames(qSubclone)[[3]]
y <- diag(qWgd[w,guessAccel[dimnames(qWgd)[[3]]],])#t[1,3,]
names(y) <- dimnames(qWgd)[[3]]

plot(c(rep(1, dim(qSubclone)[3]), rep(2, each=dim(qWgd)[3])), c(x,y), bg=tissueColors[c(dimnames(qSubclone)[[3]], dimnames(qWgd)[[3]])], pch=21, cex=1, xaxt="n", ylab="Years before diagnosis", xlab="", xlim=c(0.5,2.5), ylim=c(0, max(y, na.rm=TRUE)))
segments(rep(1, each=dim(qWgd)[3]), x[dimnames(qWgd)[[3]]], rep(2, each=dim(qWgd)[3]), y,col=tissueLines[dimnames(qWgd)[[3]]], lty= ifelse(nWgd <= 5, 3, tissueLty[dimnames(qWgd)[[3]]]))
o <- order(y, na.last=NA)
y0 <- y[o]
y1 <- mg14:::mindist(y[o], diff(par('usr')[3:4])/30)
par(xpd=NA)
mtext(dimnames(qWgd)[[3]][o], at=y1, side=4 )
segments(2.1,y0,2.2,y0)
segments(2.2,y0,2.3,y1)
segments(2.3,y1,2.4,y1)
mg14::rotatedLabel(1:2, labels=c("Subclones","WGD"))

#segments(2.1,y0,2.3,y1)

#par(xpd=TRUE)
#s <- 12/8
#dev.copy2pdf(file="realTimeSubcloneWgd.pdf", width=2.5*s, height=3.5*s, pointsize=8*s)

10.4 Multi-sample cases

donor2sample <- split(names(finalBB),sample2donor[names(finalBB)])
donor2sample <- donor2sample[sapply(donor2sample, length)>1]

10.4.1 WGD

WGD - samples with * removed

par(mfrow=c(2,3), mar=c(4,3,2,1), cex=1)
for(n in names(donor2sample)){
    t <- as.character(donor2type[n])
    try({
                s <- wgdTimeAbs[[t]][,,guessAccel[t]]
                s <- s[rownames(s) %in% donor2sample[[n]],,drop=FALSE]
                if(length(s) ==0  ) next 
                if(nrow(s) ==1) next
                plot(s[,"hat"], ylim=c(0, 30), main = paste(n, t), ylab="Time WGD [yr]", xlab="", xaxt="n", xlim=c(0,nrow(s)+1), pch=NA)
                mg14::rotatedLabel(labels=paste0(sample2icgc[rownames(s)],ifelse(rownames(s) %in% remove, "*","")))
                segments(x0=1:nrow(s),y0=s[,'lo'], y1=s[,'up'], col=tissueLines[t],lty=tissueLty[t])
                points(s[,"hat"], pch=21, bg=tissueColors[t], cex=tissueCex[t], col=tissueBorder[t])
                abline(h= mean(s[,'hat']), col=tissueLines[t], lty=3)
            })
}

10.4.2 MRCA

MRCA - samples with * removed

par(mfrow=c(8,8), mar=c(4,3,2,1), cex=1)
for(n in names(donor2sample)){
    t <- as.character(donor2type[n])
    try({
                s <- subclonesTimeAbs[[t]][,,guessAccel[t]]
                s <- s[rownames(s) %in% donor2sample[[n]],,drop=FALSE]
                if(length(s) ==0  ) next 
                if(nrow(s) ==1) next
                plot(s[,"hat"], ylim=c(0, 20), main = paste(n, t), ylab="Time WGD [yr]", xlab="", xaxt="n", xlim=c(0,nrow(s)+1), pch=NA)
                mg14::rotatedLabel(labels=paste0(sample2icgc[rownames(s)],ifelse(rownames(s) %in% remove, "*","")))
                par(xpd=NA)
                segments(x0=1:nrow(s),y0=s[,'10%'], y1=s[,'90%'], col=tissueLines[t],lty=tissueLty[t])
                points(s[,"hat"], pch=21, bg=tissueColors[t], cex=tissueCex[t], col=tissueBorder[t])
                par(xpd=TRUE)
                abline(h= mean(s[,'hat']), col=tissueLines[t], lty=3)
            })
}

11 Outputs

11.1 Real time WGD & MRCA

n <- names(finalSnv)
wgdMrcaTimingData <- data.frame(
        uuid=n,
        icgc_sample_id=sample2icgc[n], 
        icgc_donor_id=sample2donor[n], 
        tissue=donor2type[sample2donor[n]], 
        WGD=isWgd, 
        ploidy=finalPloidy,
        eff_ploidy=effGenome,
        purity=finalPurity,
        age=round(age[sample2donor[n]]),
        n_snv_mnv=sapply(finalSnv, nrow),
        CpG_TpG_trunk_pwradj=round(branchDeam[,2],2),
        CpG_TpG_subclonal_branch_pwradj=round(branchDeam[,1],2),
        CpG_TpG_subclonal_linear_pwradj=round(branchDeamLinear[,1],2),
        TiN = TiN[sample2donor[n]],
        remove = n %in% remove,
        accel = ifelse(n %in% remove,NA,guessAccel[as.character(donor2type[sample2donor[n]])]), 
        row.names=n)

t <- as.data.frame(round(Reduce("rbind", wgdTimeAbsType),2))
colnames(t) <- c("time", "time.lo","time.up")
nDeam <- sapply(wgdParamDeam[!void], function(x) if(!is.null(x$n)) sum(x$n, na.rm=TRUE) else NA)
w <- data.frame(row.names=rownames(t), t, `CpG_TpG_total`=nDeam[rownames(t)])
colnames(w) <- sub("lo", "10%", sub("up","90%", colnames(w)))

t <- cbind(branching=as.data.frame(round(Reduce("rbind", subclonesTimeAbsType),2)), linear=as.data.frame(round(Reduce("rbind", subclonesTimeAbsTypeLinear),2)))
colnames(t) <- sub("\\.hat","", colnames(t))

wgdMrcaTimingData <- cbind(wgdMrcaTimingData, 
        WGD=w[rownames(wgdMrcaTimingData),],
        MRCA.time=t[rownames(wgdMrcaTimingData),]
)

write.table(wgdMrcaTimingData, file=paste0(Sys.Date(),"-wgdMrcaTiming.txt"), sep="\t", quote=FALSE, row.names=FALSE)

11.2 All segments, MutationTime.R raw values

t <- do.call("rbind", mclapply(finalBB, function(bb) as.data.frame(bb[,c(1:6,38:47)])))
n <- rownames(t) 
t <- as.data.frame(lapply(t, function(x) if(class(x)=="numeric") round(x,3) else x)) 
t$sample <- sub("\\..+","",n)
write.table(t, file=paste0(Sys.Date(),"-allSegmentsTimeRaw.txt"), quote=FALSE, sep="\t")

11.3 Drivers

t <- as.data.frame(finalDriversAnnotated)[c(1,2,6,7,9,10,11,12,13,31:44)]
t <- as.data.frame(lapply(t, function(x) if(class(x)=="numeric") round(x,3) else x));
write.table(t, file=paste0(Sys.Date(),"-driversTiming.txt"), quote=FALSE, sep="\t")

12 Session

12.1 Commit

cat(system("git log -n1", intern=TRUE), sep="\n")
## commit 0ee3b9fd83804748041a9b3e5032ac72bad47118
## Author: Moritz Gerstung <moritz.gerstung@ebi.ac.uk>
## Date:   Tue Jul 24 15:53:52 2018 +0100
## 
##     Fixing WGD timing issue leading to NA if no mutations present

12.2 Objects

l <- ls()
data.frame(variable=l, Reduce("rbind",lapply(l, function(x) data.frame(class=class(get(x)), size=format(object.size(get(x)), units="auto")))))
##                        variable        class      size
## 1                             a    character  96 bytes
## 2                            ab        array    8.7 Kb
## 3                         accel      numeric 528 bytes
## 4                   accelRelWgd         list     77 Kb
## 5                 addAssignment     function   11.7 Kb
## 6                     addDriver     function   26.1 Kb
## 7                addFinalDriver     function   16.1 Kb
## 8                      addMutCn     function   12.1 Kb
## 9                        addTNC     function   18.1 Kb
## 10                          age      numeric    180 Kb
## 11       aggregatePerChromosome     function   31.3 Kb
## 12                    allChrAgg        array    2.8 Mb
## 13             allChrCancerHist        array   78.5 Kb
## 14                    allGender   data.frame    1.2 Mb
## 15              applyPigeonHole     function   16.2 Kb
## 16                         asum     function    2.2 Kb
## 17                           at     function   14.5 Kb
## 18            averageEvenPloidy     function    8.5 Kb
## 19                   averageHom     function    7.4 Kb
## 20                averagePloidy     function    9.3 Kb
## 21                   avgWeights     function   10.6 Kb
## 22                            b       matrix 472 bytes
## 23                     basePath    character 152 bytes
## 24                           bb      GRanges   11.8 Kb
## 25                      bbFiles    character  40 bytes
## 26                       bbPath    character 216 bytes
## 27                     bbToTime     function   70.5 Kb
## 28                   betaFromCi     function   20.7 Kb
## 29                   branchDeam       matrix  304.2 Kb
## 30             branchDeamLinear       matrix  304.2 Kb
## 31                branchLengths     function   18.4 Kb
## 32                          bwd      numeric  48 bytes
## 33                            c      numeric 328 bytes
## 34                  CANCERGENES    character   48.4 Kb
## 35                           cc         list   39.9 Kb
## 36                    chrOffset      numeric    6.1 Kb
## 37                           ci       matrix 944 bytes
## 38            classifyMutations     function   56.5 Kb
## 39                     classWgd     function    1.7 Kb
## 40                 clinicalData   data.frame  874.1 Kb
## 41                     clusters   data.frame 944 bytes
## 42               clustersFromBB     function   12.4 Kb
## 43                           cn   data.frame  123.7 Mb
## 44                       cnPath    character 216 bytes
## 45                     cnStates         list    2.7 Kb
## 46                    cnWeights     function    8.6 Kb
## 47                          col    character 648 bytes
## 48                      colTime    character 936 bytes
## 49                 computeMutCn     function  319.4 Kb
## 50      computeSubclonesTimeAbs     function   44.2 Kb
## 51          computeWgdParamDeam     function     40 Kb
## 52       consensusClustersToOld     function    5.4 Kb
## 53                            d       matrix   82.1 Kb
## 54                           d0      numeric    2.9 Kb
## 55                           d1      numeric    2.9 Kb
## 56                          d50      integer  56 bytes
## 57                         data         list    1.4 Mb
## 58                   dbetabinom     function    6.4 Kb
## 59                  deamRateWgd         list   66.4 Kb
## 60              defineMcnStates     function  222.6 Kb
## 61                           df   data.frame  227.8 Kb
## 62                  distAsRange     function   16.6 Kb
## 63                 donor2sample         list   23.7 Kb
## 64                   donor2type       factor  188.5 Kb
## 65                  doubleGains   data.frame  295.1 Kb
## 66        doubleGainsAggregated   data.frame   41.6 Kb
## 67                      dpFiles    character  303.9 Kb
## 68                       dpPath    character 152 bytes
## 69                 dtrbetabinom     function    9.6 Kb
## 70                     dtrbinom     function      3 Kb
## 71                     dumpfile    character 120 bytes
## 72                            e      density   10.4 Kb
## 73                    effGenome      numeric  282.3 Kb
## 74                            f     function    1.7 Kb
## 75                      finalBB         list    3.5 Gb
## 76                  finalBBGray         list   68.3 Mb
## 77                finalClusters         list    2.8 Mb
## 78            finalClustersGray         list   77.7 Kb
## 79                    finalData   data.frame   10.1 Mb
## 80                 finalDrivers      VRanges    1.4 Mb
## 81        finalDriversAnnotated      VRanges    2.1 Mb
## 82               finalGenotypes        array  156.2 Mb
## 83              finalGenotypesP        array  104.2 Mb
## 84              finalGenotypesQ        array   21.1 Mb
## 85                     finalHom      numeric  282.3 Kb
## 86                   finalIndel         list      2 Gb
## 87               finalIndelGray         list  648.4 Mb
## 88                  finalPloidy      numeric  282.3 Kb
## 89                   finalPower         list  568.9 Kb
## 90                  finalPurity      numeric  282.3 Kb
## 91              finalPurityGray      numeric    7.8 Kb
## 92                     finalSnv         list   20.9 Gb
## 93                 finalSnvGray         list    1.7 Gb
## 94                      finalSv         list    2.9 Gb
## 95              findMainCluster     function   25.5 Kb
## 96                   first_time      logical  48 bytes
## 97                          fit      stanfit   62.9 Mb
## 98                    flattenBB     function   22.6 Kb
## 99                           fm      numeric    2.5 Kb
## 100                         fmq       matrix    3.1 Kb
## 101           fracGenomeWgdComp       matrix  478.5 Kb
## 102 fractionGenomeWgdCompatible     function   27.6 Kb
## 103                           g       matrix     59 Kb
## 104                 getAltCount     function   32.2 Kb
## 105                 getGenotype     function   18.1 Kb
## 106          getMutationCluster     function    6.9 Kb
## 107              getTumorCounts     function    7.1 Kb
## 108               getTumorDepth     function   20.5 Kb
## 109                    grayList      logical   10.9 Kb
## 110                          gu       matrix   33.9 Kb
## 111                  guessAccel    character    2.8 Kb
## 112                           h    histogram    2.2 Kb
## 113                          hh       matrix    3.7 Kb
## 114                    histBeta     function   29.4 Kb
## 115                           i      numeric  48 bytes
## 116                           I       matrix    1.3 Mb
## 117               isDeamination     function    2.7 Kb
## 118           isDeaminationNoUV     function    2.7 Kb
## 119                       isWgd      logical  271.5 Kb
## 120                           j      integer  48 bytes
## 121                           J       matrix    1.3 Mb
## 122                           l    character     16 Kb
## 123                     lineCol    character    4.6 Kb
## 124              loadAssignment     function    6.6 Kb
## 125                      loadBB     function    8.2 Kb
## 126                loadClusters     function    8.9 Kb
## 127                      loadCn     function     11 Kb
## 128       loadConsensusClusters     function    8.9 Kb
## 129            loadConsensusCNA     function   54.4 Kb
## 130               loadPositions     function    9.1 Kb
## 131                     loadVcf     function   26.7 Kb
## 132                           m      numeric  48 bytes
## 133                          ma      numeric      3 Kb
## 134                matchDrivers     function     16 Kb
## 135                   mcnHeader     function   12.4 Kb
## 136               mergeClusters     function   22.6 Kb
## 137  mergeClustersByMutreadDiff     function   68.7 Kb
## 138                      my_png     function    6.6 Kb
## 139                           n    character  102.2 Mb
## 140                       na.rm     function    1.7 Kb
## 141                     nClones      integer  271.5 Kb
## 142                       nDeam      integer   73.1 Kb
## 143                     nDeam22      numeric   76.1 Kb
## 144                     nmSolve     function   35.5 Kb
## 145                        nSub      integer  271.5 Kb
## 146                        nWgd      integer      2 Kb
## 147                           o      integer 168 bytes
## 148                           p         list  152.6 Kb
## 149                 parseRegion     function   10.3 Kb
## 150                  pbetabinom     function    6.4 Kb
## 151                 pGainToTime     function   25.4 Kb
## 152                          pi       matrix 232 bytes
## 153                    piToTime     function   93.1 Kb
## 154                      plotBB     function   92.2 Kb
## 155                   plotPoset     function    8.9 Kb
## 156                  plotSample     function   92.2 Kb
## 157                      plotSv     function   56.5 Kb
## 158                  plotTiming     function   74.7 Kb
## 159                     plotVcf     function   59.4 Kb
## 160                   posetDist     function   14.3 Kb
## 161              posteriorMutCN     function   17.5 Kb
## 162                       power     function    6.6 Kb
## 163             predictRealTime     function    8.1 Kb
## 164                        prgn    character 696 bytes
## 165                probGenotype     function   17.2 Kb
## 166            probGenotypeTail     function   16.1 Kb
## 167                ptrbetabinom     function    8.5 Kb
## 168                          pu       matrix   41.7 Kb
## 169                      purity      numeric  48 bytes
## 170                purityPloidy   data.frame  348.8 Kb
## 171                           q       matrix    2.5 Kb
## 172                          q1      numeric  282.3 Kb
## 173                          q5      numeric  282.3 Kb
## 174                qAccelRelWgd       matrix    3.4 Kb
## 175                     qPanCan      numeric 528 bytes
## 176                   qRateDeam       matrix    4.2 Kb
## 177                   qSubclone        array    9.9 Kb
## 178             qSubcloneLinear        array    9.9 Kb
## 179                        qWgd        array    7.8 Kb
## 180                           r      numeric    2.7 Kb
## 181                    rateDeam         list  289.1 Kb
## 182                    reduceBB     function     29 Kb
## 183      reduceToCoverRelations     function   41.4 Kb
## 184                     refFile    character 120 bytes
## 185                  refLengths      GRanges   21.4 Kb
## 186                      remove    character   69.7 Kb
## 187           removeSuperclones     function   23.5 Kb
## 188                         rho      numeric  48 bytes
## 189                           s       matrix 864 bytes
## 190                sample2donor    character  435.9 Kb
## 191                 sample2icgc    character  460.6 Kb
## 192             selectedSamples      logical   10.9 Kb
## 193                        set1    character 600 bytes
## 194           simulateMutations     function     56 Kb
## 195                specimenData   data.frame    2.3 Mb
## 196                   stackTime     function   30.2 Kb
## 197            subclonesTimeAbs         list  616.5 Kb
## 198      subclonesTimeAbsLinear         list  616.5 Kb
## 199        subclonesTimeAbsType         list  259.3 Kb
## 200  subclonesTimeAbsTypeLinear         list  259.3 Kb
## 201                           t   data.frame    1.7 Mb
## 202                       T.i.F       matrix  294.1 Kb
## 203                          t0      numeric   76.1 Kb
## 204                          t2      numeric  48 bytes
## 205                          t3      numeric  48 bytes
## 206                          ta     function   11.5 Kb
## 207                  testDriver     function    5.2 Kb
## 208                   testIndel     function    5.2 Kb
## 209                          tf      numeric    2.7 Kb
## 210                  timeToBeta     function   17.4 Kb
## 211                 timing_data       matrix    3.3 Mb
## 212                 timingClass       factor  272.2 Kb
## 213                  timingInfo   data.frame  556.3 Kb
## 214                         TiN      numeric    180 Kb
## 215                tissueBorder    character    3.1 Kb
## 216                   tissueCex      numeric      3 Kb
## 217                tissueColors    character    4.6 Kb
## 218                 tissueLines    character    4.6 Kb
## 219                   tissueLty      numeric      3 Kb
## 220                        tmax      numeric  48 bytes
## 221                        tmin      numeric  48 bytes
## 222             tncToPyrimidine     function   24.4 Kb
## 223                     toGraph     function     11 Kb
## 224                         tpy      numeric  48 bytes
## 225               tryExceptNull     function      2 Kb
## 226                          tt       matrix  714.7 Kb
## 227                         tt0       matrix  304.2 Kb
## 228                      typeNa    character 440 bytes
## 229              typesSubclones    character    2.2 Kb
## 230                           u    character  188.6 Kb
## 231               uniqueSamples      logical   10.9 Kb
## 232                           v      integer      2 Kb
## 233                         vcf CollapsedVCF   50.8 Mb
## 234                    vcfIndel CollapsedVCF   43.8 Mb
## 235                     vcfPath    character 136 bytes
## 236                        void      logical   80.1 Kb
## 237                          vv        table    2.6 Kb
## 238                           w   data.frame   71.2 Kb
## 239                         w22      numeric   76.1 Kb
## 240                 wccClusters         list    2.8 Mb
## 241                   wccPurity      numeric   21.7 Kb
## 242                    wccTable   data.frame  570.9 Kb
## 243          wemeClustersMerged         list    3.1 Mb
## 244               wgdCancerHist       matrix    5.8 Kb
## 245           wgdMrcaTimingData   data.frame    1.3 Mb
## 246                wgdParamDeam         list   49.5 Mb
## 247                     wgdPoss      logical  271.5 Kb
## 248                     wgdStar       factor  272.1 Kb
## 249                     wgdStat       factor    272 Kb
## 250                     wgdTest     function   14.5 Kb
## 251                  wgdTimeAbs         list  171.6 Kb
## 252              wgdTimeAbsType         list   86.2 Kb
## 253              wgdTimeDeamAcc        array   10.3 Mb
## 254                   whiteList      logical   10.9 Kb
## 255                    wnmSolve     function   40.2 Kb
## 256                          wu      logical     27 Kb
## 257                           x    character  96 bytes
## 258                          x0      numeric  48 bytes
## 259                          xx      numeric    2.7 Kb
## 260                           y      numeric    2.1 Kb
## 261                          y0      numeric    2.1 Kb
## 262                          y1      numeric    2.1 Kb
## 263                          yy      numeric    2.7 Kb

12.3 Packages

sessionInfo()
## R version 3.3.3 (2017-03-06)
## Platform: x86_64-redhat-linux-gnu (64-bit)
## Running under: Red Hat Enterprise Linux Server 7.3 (Maipo)
## 
## locale:
## [1] en_GB.UTF-8
## 
## attached base packages:
##  [1] splines   stats4    parallel  stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] rstan_2.17.3               StanHeaders_2.17.2         ggplot2_2.2.1              VGAM_1.0-3                
##  [5] VariantAnnotation_1.20.3   SummarizedExperiment_1.4.0 Biobase_2.34.0             Rsamtools_1.26.2          
##  [9] Biostrings_2.42.1          XVector_0.14.1             GenomicRanges_1.26.4       GenomeInfoDb_1.10.3       
## [13] IRanges_2.8.2              S4Vectors_0.12.2           BiocGenerics_0.20.0        knitr_1.20                
## [17] rj_2.0.5-2                
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.16             rj.gd_2.0.0-1            mvtnorm_1.0-7            lattice_0.20-34         
##  [5] rprojroot_1.3-2          digest_0.6.15            cellranger_1.1.0         plyr_1.8.4              
##  [9] nnls_1.4                 backports_1.1.2          RSQLite_2.1.0            evaluate_0.10.1         
## [13] pillar_1.2.1             zlibbioc_1.20.0          rlang_0.2.0              GenomicFeatures_1.26.4  
## [17] readxl_1.0.0             lazyeval_0.2.1           curl_3.2                 data.table_1.10.4-3     
## [21] car_3.0-0                blob_1.1.1               Matrix_1.2-8             rmarkdown_1.9           
## [25] BiocParallel_1.8.2       foreign_0.8-67           stringr_1.3.0            RCurl_1.95-4.10         
## [29] bit_1.1-12               biomaRt_2.30.0           munsell_0.4.3            rtracklayer_1.34.2      
## [33] htmltools_0.3.6          tibble_1.4.2             gridExtra_2.3            rio_0.5.10              
## [37] codetools_0.2-15         XML_3.98-1.10            GenomicAlignments_1.10.1 bitops_1.0-6            
## [41] grid_3.3.3               gtable_0.2.0             DBI_0.8                  magrittr_1.5            
## [45] scales_0.5.0             carData_3.0-1            stringi_1.1.7            mg14_0.0.5              
## [49] openxlsx_4.0.17          RColorBrewer_1.1-2       forcats_0.3.0            tools_3.3.3             
## [53] bit64_0.9-7              BSgenome_1.42.0          abind_1.4-5              yaml_2.1.18             
## [57] AnnotationDbi_1.36.2     inline_0.3.14            colorspace_1.3-2         memoise_1.1.0           
## [61] haven_1.1.1
devtools::session_info()
## Session info ----------------------------------------------------------------------------------------------------------
##  setting  value                       
##  version  R version 3.3.3 (2017-03-06)
##  system   x86_64, linux-gnu           
##  ui       X11                         
##  language (EN)                        
##  collate  en_GB.UTF-8                 
##  tz       Europe/London               
##  date     2018-07-24
## Packages --------------------------------------------------------------------------------------------------------------
##  package              * version   date       source                    
##  abind                  1.4-5     2016-07-21 CRAN (R 3.3.3)            
##  AnnotationDbi          1.36.2    2018-01-05 Bioconductor              
##  backports              1.1.2     2017-12-13 CRAN (R 3.3.3)            
##  base                 * 3.3.3     2017-03-08 local                     
##  Biobase              * 2.34.0    2018-01-05 Bioconductor              
##  BiocGenerics         * 0.20.0    2018-01-05 Bioconductor              
##  BiocParallel           1.8.2     2018-01-05 Bioconductor              
##  biomaRt                2.30.0    2018-01-05 Bioconductor              
##  Biostrings           * 2.42.1    2018-01-05 Bioconductor              
##  bit                    1.1-12    2014-04-09 CRAN (R 3.3.3)            
##  bit64                  0.9-7     2017-05-08 CRAN (R 3.3.3)            
##  bitops                 1.0-6     2013-08-17 CRAN (R 3.3.3)            
##  blob                   1.1.1     2018-03-25 CRAN (R 3.3.3)            
##  BSgenome               1.42.0    2018-01-05 Bioconductor              
##  car                    3.0-0     2018-04-02 CRAN (R 3.3.3)            
##  carData                3.0-1     2018-03-28 CRAN (R 3.3.3)            
##  cellranger             1.1.0     2016-07-27 CRAN (R 3.3.3)            
##  codetools              0.2-15    2016-10-05 CRAN (R 3.3.3)            
##  colorspace             1.3-2     2016-12-14 CRAN (R 3.3.3)            
##  curl                   3.2       2018-03-28 CRAN (R 3.3.3)            
##  data.table             1.10.4-3  2017-10-27 CRAN (R 3.3.3)            
##  datasets             * 3.3.3     2017-03-08 local                     
##  DBI                    0.8       2018-03-02 cran (@0.8)               
##  devtools               1.13.5    2018-02-18 CRAN (R 3.3.3)            
##  digest                 0.6.15    2018-01-28 CRAN (R 3.3.3)            
##  evaluate               0.10.1    2017-06-24 CRAN (R 3.3.3)            
##  forcats                0.3.0     2018-02-19 CRAN (R 3.3.3)            
##  foreign                0.8-67    2016-09-13 CRAN (R 3.3.3)            
##  GenomeInfoDb         * 1.10.3    2018-04-11 Bioconductor              
##  GenomicAlignments      1.10.1    2018-01-05 Bioconductor              
##  GenomicFeatures        1.26.4    2018-01-05 Bioconductor              
##  GenomicRanges        * 1.26.4    2018-04-11 Bioconductor              
##  ggplot2              * 2.2.1     2016-12-30 CRAN (R 3.3.3)            
##  graphics             * 3.3.3     2017-03-08 local                     
##  grDevices            * 3.3.3     2017-03-08 local                     
##  grid                   3.3.3     2017-03-08 local                     
##  gridExtra              2.3       2017-09-09 CRAN (R 3.3.3)            
##  gtable                 0.2.0     2016-02-26 CRAN (R 3.3.3)            
##  haven                  1.1.1     2018-01-18 CRAN (R 3.3.3)            
##  htmltools              0.3.6     2017-04-28 CRAN (R 3.3.3)            
##  inline                 0.3.14    2015-04-13 CRAN (R 3.3.3)            
##  IRanges              * 2.8.2     2018-04-11 Bioconductor              
##  knitr                * 1.20      2018-02-20 CRAN (R 3.3.3)            
##  lattice                0.20-34   2016-09-06 CRAN (R 3.3.3)            
##  lazyeval               0.2.1     2017-10-29 CRAN (R 3.3.3)            
##  magrittr               1.5       2014-11-22 CRAN (R 3.3.3)            
##  Matrix                 1.2-8     2017-01-20 CRAN (R 3.3.3)            
##  memoise                1.1.0     2017-04-21 CRAN (R 3.3.3)            
##  methods              * 3.3.3     2017-03-08 local                     
##  mg14                   0.0.5     2018-04-11 Github (mg14/mg14@6a63283)
##  munsell                0.4.3     2016-02-13 CRAN (R 3.3.3)            
##  mvtnorm                1.0-7     2018-01-26 CRAN (R 3.3.3)            
##  nnls                   1.4       2012-03-19 CRAN (R 3.3.3)            
##  openxlsx               4.0.17    2017-03-23 CRAN (R 3.3.3)            
##  parallel             * 3.3.3     2017-03-08 local                     
##  pillar                 1.2.1     2018-02-27 CRAN (R 3.3.3)            
##  plyr                   1.8.4     2016-06-08 CRAN (R 3.3.3)            
##  RColorBrewer           1.1-2     2014-12-07 CRAN (R 3.3.3)            
##  Rcpp                   0.12.16   2018-03-13 CRAN (R 3.3.3)            
##  RCurl                  1.95-4.10 2018-01-04 CRAN (R 3.3.3)            
##  readxl                 1.0.0     2017-04-18 CRAN (R 3.3.3)            
##  rio                    0.5.10    2018-03-29 CRAN (R 3.3.3)            
##  rj                   * 2.0.5-2   2018-04-10 local                     
##  rj.gd                  2.0.0-1   2018-04-10 local                     
##  rlang                  0.2.0     2018-02-20 CRAN (R 3.3.3)            
##  rmarkdown              1.9       2018-03-01 CRAN (R 3.3.3)            
##  rprojroot              1.3-2     2018-01-03 CRAN (R 3.3.3)            
##  Rsamtools            * 1.26.2    2018-01-05 Bioconductor              
##  RSQLite                2.1.0     2018-03-29 CRAN (R 3.3.3)            
##  rstan                * 2.17.3    2018-01-20 CRAN (R 3.3.3)            
##  rtracklayer            1.34.2    2018-01-05 Bioconductor              
##  S4Vectors            * 0.12.2    2018-04-11 Bioconductor              
##  scales                 0.5.0     2017-08-24 CRAN (R 3.3.3)            
##  splines              * 3.3.3     2017-03-08 local                     
##  StanHeaders          * 2.17.2    2018-01-20 CRAN (R 3.3.3)            
##  stats                * 3.3.3     2017-03-08 local                     
##  stats4               * 3.3.3     2017-03-08 local                     
##  stringi                1.1.7     2018-03-12 CRAN (R 3.3.3)            
##  stringr                1.3.0     2018-02-19 CRAN (R 3.3.3)            
##  SummarizedExperiment * 1.4.0     2018-01-05 Bioconductor              
##  tibble                 1.4.2     2018-01-22 CRAN (R 3.3.3)            
##  tools                  3.3.3     2017-03-08 local                     
##  utils                * 3.3.3     2017-03-08 local                     
##  VariantAnnotation    * 1.20.3    2018-04-11 Bioconductor              
##  VGAM                 * 1.0-3     2017-01-11 Github (cran/VGAM@4bdb529)
##  withr                  2.1.2     2018-03-15 CRAN (R 3.3.3)            
##  XML                    3.98-1.10 2018-02-19 CRAN (R 3.3.3)            
##  XVector              * 0.14.1    2018-04-11 Bioconductor              
##  yaml                   2.1.18    2018-03-08 CRAN (R 3.3.3)            
##  zlibbioc               1.20.0    2018-01-05 Bioconductor

13 Other code

All code is available at github.com/gerstung-lab/PCAWG-11

13.1 MutationTime.R

See https://github.com/gerstung-lab/MutationTime.R

#' # Calculation of mutation copy numbers and timing parameters
#' Minimal example
#' source("/Users/mg14/Projects/PCAWG-11/code/MutationTime.R")
#' vcf <- readVcf("final/final_consensus_12oct_passonly/snv_mnv/0040b1b6-b07a-4b6e-90ef-133523eaf412.consensus.20160830.somatic.snv_mnv.vcf.gz",genome="GRCh37")
#' bb <- loadBB("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/4_copynumber/0040b1b6-b07a-4b6e-90ef-133523eaf412_segments.txt.gz")
#' clusters = read.table("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/2_subclones/0040b1b6-b07a-4b6e-90ef-133523eaf412_subclonal_structure.txt.gz", header=TRUE, sep="\t")
#' purityPloidy <- read.table("dp/20161213_vanloo_wedge_consSNV_prelimConsCNAallStar/1_purity_ploidy/purity_ploidy.txt, header=TRUE, sep="\t")
#' purity <- purityPloidy[2,2]
#' MCN <- computeMutCn(vcf[1:1000], bb, clusters, purity)
#' # Check output
#' # Mutation Annotation
#' head(MCN$D)
#' # Classify as basic clonal states
#' table(classifyMutations(MCN$D))
#' # Timing parameters
#' MCN$P[[1]]
#' # Extract timing of segments
#' bb$timing_param <- MCN$P
#' bbToTime(bb)
#' PRE: Purity must be equal to the main clone, otherwise spurious results can be generated
#' PRE: CNV segments don't have to overlap, otherwise an error is generated: "Error in if (!mixFlag[j]) { : missing value where TRUE/FALSE needed"

require(VariantAnnotation)
require(VGAM)



#' Extract tumour depth
#' @param vcf 
#' @return 
#' 
#' @author mg14
#' @export
getTumorDepth <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count + info(vcf)$t_ref_count
    }else{ ## older data
        if("FAZ" %in% rownames(geno(header(vcf)))){
            rowSums(getTumorCounts(vcf))
        }else{
            geno(vcf)$DEP[,2]
        }
    }
}


#' Get alt alleles counts 
#' @param vcf 
#' @return 
#' 
#' @author mg14
#' @export
getAltCount <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count
    }else{ ## older formats
        if("FAZ" %in% rownames(geno(header(vcf)))){ ## ie subs
            c <- getTumorCounts(vcf)
            t <- c[,1:4] + c[,5:8]
            colnames(t) <- substring(colnames(t),2,2)
            a <- as.character(unlist(alt(vcf)))
            a[!a%in%c('A','T','C','G')] <- NA
            sapply(seq_along(a), function(i) if(is.na(a[i])) NA else t[i, a[i]])
        }
        else{ ## ie indel
            #(geno(vcf)$PP + geno(vcf)$NP + geno(vcf)$PB + geno(vcf)$NB)[,"TUMOUR"]
            geno(vcf)$MTR[,2]
        }
    }
}

dtrbinom <- function(x, size, prob, xmin=0) dbinom(x,size,prob) / pbinom(xmin-1, size, prob, lower.tail=FALSE)
pbetabinom <- function(x, size, prob, rho){
    if(rho!=0)
        VGAM::pbetabinom(x, size, prob, rho)
    else
        pbinom(x, size, prob)
}
dbetabinom <- function(x, size, prob, rho){
    if(rho!=0)
        VGAM::dbetabinom(x, size, prob, rho)
    else
        dbinom(x, size, prob)
}
dtrbetabinom <- function(x, size, prob, rho, xmin=0) {y <- dbetabinom(x,size,prob,rho) / (1-pbetabinom(xmin-1, size, prob, rho))
    y[x<xmin] <- 0
    return(y)}
ptrbetabinom <- function(x, size, prob, rho, xmin=0) {
    pmin <- pbetabinom(xmin-1, size, prob, rho)
    pmax(0,(pbetabinom(x,size,prob,rho) - pmin) / (1-pmin))}


mergeClusters <- function(clusters, deltaFreq=0.05){
    if(nrow(clusters) <= 1) return(clusters)
    h <- hclust(dist(clusters$proportion))
    ct <- cutree(h, h=deltaFreq)
    cp <- as.matrix(cophenetic(h))
    Reduce("rbind",lapply(unique(ct), function(i) {
                        n_ssms <- sum(clusters$n_ssms[ct==i])
                        w <- max(cp[ct==i,ct==i])
                        data.frame(new.cluster=i, n_ssms=n_ssms, proportion=sum(clusters$proportion[ct==i]*clusters$n_ssms[ct==i])/n_ssms, width=w)
                    }
            ))
}

#' Compute possible Mutation copy number states
#' @param bb Copy number with consensus annotation meta data
#' @param clusters 
#' @param purity 
#' @param gender 
#' @param isWgd 
#' @return list of length nrow(bb), can be added to mcols(bb)
#' 
#' @author mg14
#' @export
defineMcnStates <- function(bb, clusters, purity, gender='female', isWgd= FALSE){
    P <- vector(mode='list', length(bb))
    uniqueBB <- unique(bb)
    overlaps <- findOverlaps(uniqueBB, bb)
    
    majorCN <- split(bb$major_cn[subjectHits(overlaps)], queryHits(overlaps))
    m <- bb$minor_cn #hack: minor_cn > 0 in male samples - Battenberg bug?
    if(gender=='male')
        m[as.character(seqnames(bb)) %in% c('X','Y')] <- 0
    minorCN <- split(m[subjectHits(overlaps)], queryHits(overlaps)) 
    h <- selectHits(overlaps, "first")
    H <- selectHits(overlaps, "last")
    
    cnNormal <- 2 - (gender=='male' & seqnames(uniqueBB)=="X" | seqnames(uniqueBB)=="Y")
    
    # Fix cluster and purity discrepancies
    clusters$proportion[which.max(clusters$proportion)] <- purity
    
    cloneFreq <- split(bb$clonal_frequency[subjectHits(overlaps)], queryHits(overlaps))
    cnStates <- matrix(0, nrow=10000, ncol=6)
    colnames(cnStates) <- c("state","m","f","n.m.s","pi.m.s","s")
    
    power.c <- rep(0, nrow(clusters))
    
    deltaFreq <- 0.05 # merge clusters withing deltaFreq
    
    
    for( i in seq_along(uniqueBB)){
        if(!i %in% names(majorCN)) next
        majcni <- majorCN[[as.character(i)]]
        mincni <- minorCN[[as.character(i)]]
        cfi <- cloneFreq[[as.character(i)]]
        effCnTumor <- sum((majcni + mincni)*cfi)
        effCnNormal <- as.numeric(cnNormal[i]) * (1-purity)
        
        if(any(is.na(majcni))) next
        
        mixFlag <- FALSE
        subclonalGainFlag <- FALSE
        clonalFlag <- TRUE
        majdelta <- 0
        mindelta <- 0
        
        majanc <- majder <- majcni
        minanc <- minder <- mincni
        
        if(length(cfi)>1){ # multiple (subclonal) CN states, if so add clonal option (ie. mixture of both states), subclonal states only change by 1..delta(CN)
            d <- colSums(abs(rbind(majcni, mincni) - c(1,1) * (1+ isWgd)))
            derived <- d == max(d) ## derived state further from diploid/tetraploid
            if(all(derived)) next 
            majanc <- majcni[!derived]
            minanc <- mincni[!derived]
            majder <- majcni[derived]
            minder <- mincni[derived]
            majdelta <- majcni[derived] - majcni[!derived]
            mindelta <- mincni[derived] - mincni[!derived]
            majcni <- c(min(majcni), # clonal, sub on allele that doesn't change
                    (majcni[!derived] + cfi[derived]/purity*majdelta), # clonal, sub on allele that does change
                    (majcni[derived] >0) + (majdelta > 0)) # subclonal, subs after or before CNA, m=1,delta
            mincni <- c(min(mincni), (mincni[!derived] + cfi[derived]/purity*mindelta), (mincni[derived] >0) + (mindelta > 0))
            majdelta <- c(0, cfi[derived]/purity*majdelta, majdelta)
            mindelta <- c(0, cfi[derived]/purity*mindelta, mindelta)
            cfi <- c(purity, purity,  cfi[derived])
            mixFlag <- c(FALSE, TRUE, FALSE)
            clonalFlag <- c(TRUE,TRUE,FALSE)
            subclonalGainFlag <- c(FALSE, FALSE, TRUE)
        }
        
        
        a <- sapply(clusters$proportion, function(p) all(abs(p-cfi) > deltaFreq)) # subclone(s) not coinciding with CN change
        if(any(a)){ # assume subclones have derived from most abundant CN state
            majcni <- c(majcni, rep(majcni[which.max(cfi)]>0, sum(a))+0)
            mincni <- c(mincni, rep(mincni[which.max(cfi)]>0, sum(a))+0)
            cfi <- c(cfi, clusters$proportion[a])
            mixFlag <- c(mixFlag, rep(FALSE, sum(a)))
            clonalFlag <- c(clonalFlag, rep(FALSE, sum(a)))
            subclonalGainFlag <- c(subclonalGainFlag, rep(FALSE, sum(a)))
            majdelta <- c(majdelta, rep(0,sum(a)))
            mindelta <- c(mindelta, rep(0,sum(a)))
        }
        totcni <- majcni+mincni
        if(all(totcni==0)) next
        
        k <- 0
        for( j in seq_along(majcni)){
            if(majcni[j]==0 & mincni[j]==0) {
                f <- m <- 0 # allele frequency
                pi.m.s <- n.m.s <- 1
                l <- 1
            }else{
                l <- 1:max(majcni[j], mincni[j]) # mincni>majcni can occur if minor allele changes subclonally
                m <- l
                n.m.s <- rep(1, length(l)) #multiplicity of cn states
                if(!mixFlag[j]){ # single subclone, or no subclonal cn
                    f <- m * cfi[j] / (effCnTumor + effCnNormal)
                    if(mincni[j] > 0)
                        n.m.s[1:min(majcni[j], mincni[j])] <- 2
                    pi.m.s <- n.m.s/sum(n.m.s)
                }else{ # coexisting cn subclones, use mixture
                    d <- if(majdelta[j] != 0) majdelta[j] else mindelta[j] 
                    M <- max(mincni[j]*(mindelta[j]!=0), majcni[j]*(majdelta[j]!=0))
                    m <- (d > 0):M + (M-floor(M))
                    l <- seq_along(m)
                    f <- m *cfi[j] / (effCnTumor + effCnNormal) # Variant on major allele
                    n.m.s <- rep(1, length(l))
                    pi.m.s <- n.m.s/sum(n.m.s)
                }
            }
            cnStates[k + l,"state"]=j
            cnStates[k + l,"m"]=m
            cnStates[k + l,"f"]=f
            cnStates[k + l,"pi.m.s"]=pi.m.s
            cnStates[k + l,"n.m.s"]=n.m.s
            k <- k + length(l)
        }
        whichStates <- (1:k)[cnStates[1:k,"f"]>0]
        
        # State probabilities - based on cell fractions
        cfi.s <- unique(cfi)
        pi.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, clusters$n_ssms[which.min(abs(clusters$proportion - p))], 1))
        pi.s <- pi.s/sum(pi.s)
        
        c.to.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, which.min(abs(clusters$proportion - p)), NA)) # map to cluster
        s.to.c <- sapply(clusters$proportion, function(c) which.min(abs(cfi.s - c)))
        
        cnStates[1:k,"s"] = as.numeric(factor(cfi, levels=cfi.s))[cnStates[1:k,"state"]]
        
        timing_param <- cbind(cnStates[whichStates,,drop=FALSE], cfi=cfi[cnStates[whichStates,"state"]], pi.s=pi.s[cnStates[whichStates,"s"]], P.m.sX=NA,P.m.sX.lo=NA, P.m.sX.up=NA, T.m.sX=NA, T.m.sX.lo=NA, T.m.sX.up=NA, power.s=NA, power.m.s = NA,
                majCN=majcni[cnStates[whichStates,"state"]], minCN=mincni[cnStates[whichStates,"state"]], 
                majDelta = majdelta[cnStates[whichStates,"state"]], minDelta = mindelta[cnStates[whichStates,"state"]], 
                clonalFlag=clonalFlag[cnStates[whichStates,"state"]], subclonalGainFlag=subclonalGainFlag[cnStates[whichStates,"state"]], mixFlag=mixFlag[cnStates[whichStates,"state"]], majCNanc=majanc, minCNanc=minanc, majCNder=majder, minCNder=minder)
        P[[h[i]]] <- timing_param
        if(H[i] != h[i]) P[[H[[i]]]] <- P[[h[i]]]
        
    }
    return(P)
} 


#' Compute Mutation copy numbers
#' @param vcf A vcf object of ssnms. See VariantAnnotation::readVcf()
#' @param bb The copy number as a GRanges() object, meta data in consensus format. See loadBB()
#' @param clusters A data.frame with the cluster proportion and n_ssms
#' @param purity The purity of the samples
#' @param gender 'male' or 'female'
#' @param isWgd TRUE/FALSE 
#' @param xmin min read support. Needed for power calculations
#' @param rho Dispersion parameter
#' @return A list with elements (D: Annotated Data.Frame, can be added to vcf object; P: Timing parameters to be added to CN Ranges; power.c power of each cluster).
#' 
#' @author mg14
#' @export
computeMutCn <- function(vcf, bb, clusters, purity, gender='female', isWgd= FALSE, xmin=3, rho=0, n.boot=200){
    n <- nrow(vcf)
    D <- DataFrame(MutCN=rep(NA,n), MutDeltaCN=rep(NA,n), MajCN=rep(NA,n), MinCN=rep(NA,n), MajDerCN=rep(NA,n), MinDerCN=rep(NA,n), CNF=rep(NA,n), CNID =as(vector("list", n),"List"), pMutCN=rep(NA,n), pGain=rep(NA,n),pSingle=rep(NA,n),pSub=rep(NA,n), pMutCNTail=rep(NA,n))    
    P <- defineMcnStates(bb,clusters, purity, gender, isWgd)
    if(n==0)
        return(list(D=D, P=P))
    
    altCount <- getAltCount(vcf)
    tumDepth <- getTumorDepth(vcf)
    names(altCount) <- names(tumDepth) <- NULL
    
    # Match VCF and CN
    overlaps <- findOverlaps(vcf, bb)
    D[["CNID"]] <- as(overlaps, "List")
    majorCN <- split(bb$major_cn[subjectHits(overlaps)], queryHits(overlaps))
    m <- bb$minor_cn #hack: minor_cn > 0 in male samples - Battenberg bug?
    if(gender=='male')
        m[as.character(seqnames(bb)) %in% c('X','Y')] <- 0
    minorCN <- split(m[subjectHits(overlaps)], queryHits(overlaps)) 
    h <- selectHits(overlaps, "first")
    H <- selectHits(overlaps, "last")
    
    cnNormal <- 2 - (gender=='male' & seqnames(vcf)=="X" | seqnames(vcf)=="Y")
    
    # Fix cluster and purity discrepancies
    clusters$proportion[which.max(clusters$proportion)] <- purity
    
    cloneFreq <- split(bb$clonal_frequency[subjectHits(overlaps)], queryHits(overlaps))
    
    power.c <- rep(0, nrow(clusters))
    
    deltaFreq <- 0.05 # merge clusters withing deltaFreq
    
    boundaryHits <- countOverlaps(vcf, unique(bb)) > 1 # indels overlapping with CN boundaries
    
    for(globalIt in 1:2){ # 2 iterations, fist local (ie per segment) fit, then global
        for( i in which( (diff(c(-1, h)) !=0 | is.na(diff(c(-1, h)) !=0) ) & ! boundaryHits )){
            if(!i %in% names(majorCN)) next
            if(is.na(h[i])) next
            if(if(i>1) h[i] != h[i-1] | is.na(h[i-1]) else TRUE){ #ie. new segment
                
                hh <- which(h==h[i] & !is.na(altCount) &! is.na(tumDepth))
                if(length(hh)==0) next
                
                if(is.null(bb$timing_param[[h[i]]])){
                    cnStates <- P[[h[i]]]
                    if(is.null(cnStates)) next
                    whichStates <- 1:nrow(cnStates)
                    
                    # State probabilities - based on cell fractions
                    cfi.s <- unique(cnStates[,"cfi"])
                    pi.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, clusters$n_ssms[which.min(abs(clusters$proportion - p))], 1))
                    pi.s <- pi.s/sum(pi.s)
                    
                    c.to.s <- sapply(cfi.s, function(p) ifelse(min(abs(clusters$proportion - p)) < deltaFreq, which.min(abs(clusters$proportion - p)), NA)) # map to cluster
                    s.to.c <- sapply(clusters$proportion, function(c) which.min(abs(cfi.s - c)))
                    
                    
                    # Likelihood
                    L <- matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) dtrbetabinom(altCount[hh],tumDepth[hh],pp, rho=rho, xmin=pmin(altCount[hh],0)) + .Machine$double.eps), ncol=length(whichStates))
                    
                    # Power
                    power.sm <- colMeans(matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) 1-ptrbetabinom(pmin(altCount[hh],xmin-1),tumDepth[hh],pp, rho=rho, xmin=0)), ncol=length(whichStates)), na.rm=TRUE)
                    if(globalIt==2){
                        P.m.sX <- P[[h[i]]][,"P.m.sX"]
                        power.s <- sapply(split(power.sm * P.m.sX, cnStates[whichStates,"s"]), sum) # Power for state
                        power.s[!is.na(c.to.s)] <- power.c[na.omit(c.to.s)]
                        power.m.s <- power.sm # Relative power of m states (local) conditioned on s (global).
                        for(s in unique(cnStates[whichStates,"s"])) power.m.s[cnStates[whichStates,"s"]==s] <- power.m.s[cnStates[whichStates,"s"]==s] / max(power.m.s[cnStates[whichStates,"s"]==s]) #power.s[s]
                    }else{ # First iteration
                        power.m.s <- power.sm
                        power.s <- rep(1,length(whichStates))
                    }
                    
                    mm <- function(x) {
                        x <- factor(x)
                        if(nlevels(x) > 1) t(model.matrix( ~ x + 0)) else matrix(1, ncol=length(x))
                    }
                    
                    # EM algorithm (mixture fitting) for pi
                    P.m.sX <- cnStates[whichStates,"pi.m.s"]
                    s.from.m <- mm(cnStates[whichStates,"s"]) # indicator matrix to map
                    for(em.it in 1:100){
                        P.xsm <- L * rep(pi.s[cnStates[whichStates,"s"]] * P.m.sX / power.m.s / power.s[cnStates[whichStates,"s"]], each=nrow(L)) # P(X,s,m)
                        P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
                        P.sm.X <- pmax(.Machine$double.xmin,colMeans(P.sm.x)) # P(s,m|X) / piState[cnStates[1:k,"state"]] / cnStates[1:k,"pi.m.s"]
                        if(em.it==100) break
                        P.s.X <- s.from.m %*% P.sm.X 
                        P.m.sX <- P.sm.X / P.s.X[cnStates[whichStates,"s"]]
                    }
                    
                    toTime <- function(cnStates, P.m.sX, s.m) {
                        mAnc <- cnStates[,"m"] - cnStates[,"minDelta"] - cnStates[,"majDelta"]
                        mAnc.s <- factor(paste(mAnc, cnStates[,"s"], sep="."))
                        n <- (mAnc <= cnStates[,"majCNanc"]) + (mAnc <= cnStates[,"minCNanc"] )
                        mAnc.s.from.m <- mm(x = mAnc.s)# indicator matrix to map
                        return((mAnc.s.from.m[mAnc.s,] %*% P.m.sX) / (s.m[cnStates[,"s"],] %*% (P.m.sX * mAnc)) *  (cnStates[,"majCNanc"] + cnStates[,"minCNanc"]) / n)
                    }
                    
                    T.m.sX <- toTime(cnStates, P.m.sX, s.from.m) 
                    
                    if(globalIt==1){
                        p <- (sapply(split(power.sm * P.m.sX, cnStates[whichStates,"s"]), sum) * nrow(L))[s.to.c]
                        if(!any(is.na(p) | is.nan(p)))
                            power.c <- power.c + p 
                    }
                    
                    # Bootstrapping for CIs
                    if(globalIt==2){
                        b.m.sX <- if(n.boot>0) sapply(1:n.boot, function(foo){
                                                L <- rbind(L, rep(1e-3, each=ncol(L))) #add an uniformative row
                                                L <- L[sample(1:nrow(L), replace=TRUE),,drop=FALSE]
                                                P.m.sX <- cnStates[whichStates,"pi.m.s"]
                                                for(em.it in 1:50){
                                                    P.xsm <- L * rep(pi.s[cnStates[whichStates,"s"]] * P.m.sX / power.m.s / power.s[cnStates[whichStates,"s"]], each=nrow(L)) # P(X,s,m)
                                                    P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
                                                    P.sm.X <- colMeans(P.sm.x) # P(s,m|X) / piState[cnStates[1:k,"state"]] / cnStates[1:k,"pi.m.s"]
                                                    P.s.X <- s.from.m %*% P.sm.X 
                                                    P.m.sX <- P.sm.X / P.s.X[cnStates[whichStates,"s"]]
                                                }
                                                return(P.m.sX)
                                            }) else NA
                        if(n.boot>0) try({
                                        CI.m.sX <- apply(b.m.sX, 1, quantile, c(0.025, 0.975))
                                        cnStates[,"P.m.sX.lo"] <- CI.m.sX[1,] 
                                        cnStates[,"P.m.sX.up"] <- CI.m.sX[2,]
                                        B.m.sX <- toTime(cnStates = cnStates, P.m.sX = b.m.sX, s.m = s.from.m)
                                        C.m.sX <- apply(B.m.sX, 1, quantile, c(0.025, 0.975))
                                        cnStates[,"T.m.sX.lo"] <- C.m.sX[1,] 
                                        cnStates[,"T.m.sX.up"] <- C.m.sX[2,]
                                    }, silent=TRUE)
                    }
                    
                    P.sm.x[apply(is.na(P.sm.x)|is.nan(P.sm.x),1,any),] <- NA
                    cnStates[,"P.m.sX"] <- P.m.sX
                    cnStates[,"T.m.sX"] <- T.m.sX
                    cnStates[,"power.s"] <- power.s[cnStates[whichStates,"s"]]
                    cnStates[,"power.m.s"] <- power.m.s
                    
                }else{
                    cnStates <- bb$timing_param[[h[i]]]
                    if(is.null(cnStates)) next
                    P.sm.x <- posteriorMutCN(x=altCount[hh],n=tumDepth[hh], cnStates=cnStates, xmin=0, rho=rho)
                }
                
                # Tail probs
                pMutCNTail <- matrix(sapply(pmin(cnStates[,"f"],1), function(pp) ptrbetabinom(altCount[hh],tumDepth[hh],pp, rho=rho, xmin=pmin(altCount[hh],xmin))), ncol=nrow(cnStates)) #%*% c(pi.s[cnStates[whichStates,"state"]] * P.m.sX)              
                
                P[[h[i]]] <- cnStates
                if(H[i] != h[i]) P[[H[[i]]]] <- P[[h[i]]]
                
                w <- apply(P.sm.x, 1, function(x) if(any(is.na(x))) NA else which.max(x) )
                if(all(is.na(w))) next
                
                D[hh, "pSub"] <- rowSums(P.sm.x[, !cnStates[,"clonalFlag"], drop=FALSE])
                D[hh, "pGain"] <- rowSums(P.sm.x[, cnStates[,"clonalFlag"] & cnStates[,"m"] > 1.00001 + cnStates[,"majDelta"] + cnStates[,"minDelta"], drop=FALSE])
                #D[hh, "pSingle"] <- rowSums(P.sm.x[, cnStates[1:k,"state"] %in% which(clonalFlag) & cnStates[1:k,"m"]<=1, drop=FALSE])
                D[hh, "pSingle"] <-  1 - D[hh, "pSub"] - D[hh, "pGain"]         
                
                D[hh,"MutCN"]  <- cnStates[w,"m"]
                D[hh,"MutDeltaCN"]  <- cnStates[w,"majDelta"] + cnStates[w,"minDelta"]
                D[hh,"MinCN"] <- cnStates[w,"minCNanc"]
                D[hh,"MajCN"] <- cnStates[w,"majCNanc"]
                D[hh,"MinDerCN"] <- cnStates[w,"minCNder"]
                D[hh,"MajDerCN"] <- cnStates[w,"majCNder"]
                
                D[hh,"CNF"]  <- cnStates[w,"cfi"]
                D[hh,"pMutCN"] <- sapply(seq_along(w), function(i) P.sm.x[i,w[i]])
                D[hh,"pMutCNTail"] <- sapply(seq_along(w), function(i) pMutCNTail[i,w[i]])
            }       
        }
        if(globalIt==1){
            power.c <- power.c / sum(!is.na(D[,"pSub"]))
            if(any(is.na(power.c) | power.c==0)) {
                break # Cancel 2nd iteration
                warning("Power calculation yielded NA, aborting.")
            }
            if(any(power.c > 1)) {
                warning("Calculated power > 1, rounding down.")
                power.c <- pmin(1, power.c)
            }
        }
    }
    return(list(D=D,P=P, power.c=power.c))
}

mcnHeader <- function() {
    DataFrame(Number=c(1,1,1,1,1,1,1,1,".",1,1,1,1),Type=c("Float","Float","Integer","Integer","Integer","Integer","Float","Float","Integer","Float","Float","Float","Float"), 
            Description=c("Mutation copy number","Change in MutCN between ancestral and derived state","Major copy number (ancestral)","Minor copy number (ancestral)","Major copy number (derived)","Minor copy number (derived)","Copy number frequency (relative to all cancer cells)", "MutCN probability","BB segment ids","Posterior prob: Early clonal","Posterior prob: Late clonal","Posterior prob: Subclonal", "Tail prob of mixture model"),
            row.names=c("MutCN","MutDeltaCN","MajCN","MinCN","MajDerCN","MinDerCN","CNF","pMutCN","CNID","pGain","pSingle","pSub", "pMutCNTail"))
}

addMutCn <- function(vcf, bb=allBB[[meta(header(vcf))["ID",]]], clusters=allClusters[[meta(header(vcf))["ID",]]]){
    i = info(header(vcf))
    info(header(vcf)) <- rbind(i, mcnHeader())
    info(vcf) <- cbind(info(vcf), computeMutCn(vcf, bb, clusters)$D)
    return(vcf)
}

classifyMutations <- function(x, reclassify=c("missing","all","none")) {
    reclassify <- match.arg(reclassify)
    if(nrow(x) ==0 )
        return(factor(NULL, levels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal")))
    if(class(x)=="CollapsedVCF")
    x <- info(x)
    .clsfy <- function(x) {
        cls <- x$CLS
        if(reclassify %in% c("missing", "none") &! is.null(cls)){
            if(all(unique(cls) %in% c("early", "late", "clonal", "subclonal")))
                cls <- factor(cls, levels=c("early", "late", "clonal", "subclonal"), labels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal"))
            cls <- as.character(cls)
            cls[cls=="NA"] <- NA
            if(reclassify=="missing" & any(is.na(cls)))
                cls[is.na(cls)] <- paste(factor(apply(as.matrix(x[is.na(cls), c("pGain","pSingle","pSub")]), 1, function(x) if(all(is.na(x))) NA else which.max(x)), levels=1:3, labels=c("clonal [early]", "clonal [late]","subclonal"))) ## reclassify missing
        }else{
            cls <- paste(factor(apply(as.matrix(x[, c("pGain","pSingle","pSub")]), 1, function(x) if(all(is.na(x))) NA else which.max(x)), levels=1:3, labels=c("clonal [early]", "clonal [late]","subclonal"))) ## reclassify missing
            
        }
        cls[x$pGain==0 & cls!="subclonal"] <- "clonal [NA]"
        if(!is.null(x$MajCN))
            cls[cls!="subclonal" & (x$MajCN == 1 | x$MinCN == 1) & abs(x$MutCN - x$MutDeltaCN -1) <= 0.0001] <- "clonal [NA]"
        cls <- factor(cls, levels=c("clonal [early]", "clonal [late]", "clonal [NA]", "subclonal"))
    }
    cls <- .clsfy(x)
    return(cls)
}

posteriorMutCN <- function(x,n, cnStates, xmin=3, rho=0.01){
    whichStates <- 1:nrow(cnStates)
    L <- matrix(sapply(pmin(cnStates[whichStates,"f"],1), function(pp) dtrbetabinom(x,n,pp, rho=rho, xmin=pmin(x,xmin)) + .Machine$double.eps), ncol=length(whichStates))
    P.xsm <- L * rep(cnStates[whichStates,"pi.s"] * cnStates[whichStates,"P.m.sX"] / cnStates[whichStates,"power.s"] / cnStates[whichStates,"power.m.s"], each=nrow(L)) # P(X,s,m)
    P.sm.x <- P.xsm/rowSums(P.xsm) # P(s,m|Xi)
    return(P.sm.x)
}


loadBB <- function(file){
    tab <- read.table(file, header=TRUE, sep='\t')
    GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", tab[-3:-1])
}

pGainToTime <- function(vcf){
    P <- matrix(NA, nrow=nrow(vcf), ncol=4, dimnames=list(NULL, c("pEarly","pLate","pClonal[NA]","pSub")))
    P[,c("pEarly","pClonal[NA]","pSub")] <- as.matrix(info(vcf)[,c("pGain","pSingle","pSub")])
    biAllelicGain <- (info(vcf)$MajCN > 1 & (info(vcf)$MinCN > 1 | info(vcf)$MinCN == 0) & ! ((info(vcf)$MajCN == 1 | info(vcf)$MinCN == 1) & abs(info(vcf)$MutCN - info(vcf)$MutDeltaCN -1) <= 0.0001))
    w <- which(biAllelicGain)
    P[w, "pLate"] <- P[w, "pClonal[NA]"]
    P[w, "pClonal[NA]"] <- 0
    P[which(!biAllelicGain),"pLate"] <- 0
    return(P)
}

piToTime <- function(timing_param, type=c("Mono-allelic Gain","CN-LOH", "Bi-allelic Gain (WGD)")){
    type <- match.arg(type)
    evo <- NA
    w <- timing_param[,"s"]==1 &! timing_param[,"mixFlag"] ## Clonal states, not mixture (CN subclonal)
    M <- sum(w) ## Max multiplicity = Major copy number
    m <- sum(w & timing_param[,"n.m.s"]==2) ## Minor CN
    #evo <- paste0("1:1", paste0(2,":",m), if(M>2) paste0(3,":",) else "", collapse="->")
    t <- timing_param[(M:(M-1)),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE] ## Timing M and M-1
    if(nrow(t)==1) t <- rbind(t, NA)
    if(!any(is.na(t))){
        if(M==4) {
            if(timing_param[M-1,"P.m.sX"] < 0.02){ ## No MCN 3
                if(type=="CN-LOH"){ ## Hotfix for 4+0, treated at 1:1 -> 2:0 -> 4:0
                    t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE]*c(1,0.5) ## Timing M and M-2
                    evo <- "1:1->2:0->4:0"
                }
                else if(type=="Bi-allelic Gain (WGD)"){         
                    if(m==2) {## Hotfix for 4+2 regions, treated at 1:1 -> 2:1 -> 4:2
                        t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE] ## Timing M and M-2
                        t[2,] <- pmax(0,2*t[2,] - t[1,])/3
                        evo <- "1:1->2:1->4:2"
                    } else if(m==4) {## Hotfix for 4+4 regions, treated at 1:1 -> 2:2 -> 4:4
                        t <- timing_param[c(M,M-2),c("T.m.sX","T.m.sX.lo","T.m.sX.up"), drop=FALSE]*c(1,0.5) ## Timing M and M-2
                        evo <- "1:1->2:2->4:4"
                    }
                }           
            } else if(type=="Bi-allelic Gain (WGD)"){ ## Can't uniquely time second event
                t[2,] <- NA
            } 
            if(m==3) {
                t[2,] <- NA ## Don'time secondary 4+3 for now, needs more work
            } 
        } else {
            if(M==3 & type=="Bi-allelic Gain (WGD)") {## Hotfix for 3+2 regions, treated at 1:1 -> 2:2 -> 3:2
                t[2,] <- pmax(0,2*t[2,] - t[1,])
                evo <- "1:1->2:2->3:2"
            }
        }
    }
    colnames(t) <- c("","lo","up")
    t[,2] <- pmin(t[,1],t[,2])
    t[,3] <- pmax(t[,1],t[,3])
    t <- pmin(apply(t,2,cumsum),1) ## Times are actually deltas
    if(M < 3) t[2,] <- NA
    t[is.infinite(t)] <- NA
    rownames(t) <- c("",".2nd")
    return(c(t[1,],`.2nd`=t[2,])) ## Linearise
}

bbToTime <- function(bb, timing_param = bb$timing_param, pseudo.count=5){
    sub <- duplicated(bb) 
    covrg <- countQueryHits(findOverlaps(bb, bb)) 
    maj <- sapply(timing_param, function(x) if(length(x) > 0) x[1, "majCNanc"] else NA) #bb$major_cn
    min <- sapply(timing_param, function(x) if(length(x) > 0) x[1, "minCNanc"] else NA) #bb$minor_cn
    type <- sapply(seq_along(bb), function(i){
                if(maj[i] < 2 | is.na(maj[i]) | sub[i] | (maj[i] > 4 & min[i] >= 2)) return(NA)
                type <- if(min[i]==1){ "Mono-allelic Gain" 
                        }else if(min[i]==0){"CN-LOH"}
                        else "Bi-allelic Gain (WGD)"
                return(type)
            })
    time <- t(sapply(seq_along(bb), function(i){
                        if(sub[i] | is.na(type[i])) return(rep(NA,6)) 
                        else piToTime(timing_param[[i]],type[i])
                    }))
    
    res <- data.frame(type=factor(type, levels=c("Mono-allelic Gain","CN-LOH","Bi-allelic Gain (WGD)")), time=time)
    colnames(res) <- c("type","time","time.lo","time.up","time.2nd","time.2nd.lo","time.2nd.up")
    
    # posthoc adjustment of CI's
    res$time.up <- (pseudo.count + bb$n.snv_mnv * res$time.up)/(pseudo.count + bb$n.snv_mnv)
    res$time.lo <- (0 + bb$n.snv_mnv * res$time.lo)/(pseudo.count + bb$n.snv_mnv)
    res$time.2nd.up <- (pseudo.count + bb$n.snv_mnv * res$time.2nd.up)/(pseudo.count + bb$n.snv_mnv)
    res$time.2nd.lo <- (0 + bb$n.snv_mnv * res$time.2nd.lo)/(pseudo.count + bb$n.snv_mnv)
    
    res$time.star <- factor((covrg == 1) + (min < 2 & maj <= 2 | min==2 & maj==2) * (covrg == 1), levels=0:2, labels = c("*","**","***")) ## ***: 2+0, 2+1, 2+2; **: 2<n+1, {3,4}+2; *: subclonal gains
    res$time.star[is.na(res$time)] <- NA
    return(res)
}

simulateMutations <- function(bb, purity=max(bb$clonal_frequency, na.rm=TRUE),  n=40, rho=0.01, xmin=3){
    g <- (averagePloidy(bb)*purity + 2*(1-purity))
    V <- list(VRanges())#VRanges()
    for(i in which(!duplicated(bb)))
        if(bb$n.snv_mnv[i]>1 & !is.null( bb$timing_param[[i]]))try({
                        cnStates <- bb$timing_param[[i]]
                        p <- cnStates[,"pi.s"]* if(!any(is.na(cnStates[,"P.m.sX"]))) cnStates[,"P.m.sX"] else cnStates[,"pi.m.s"]
                        pwr <- cnStates[,"power.m.s"]#(cnStates[,"power.s"] * cnStates[,"power.m.s"])
                        s <- sample(1:nrow(cnStates), size=pmax(1,ceiling(bb$n.snv_mnv[i] * (p %*% (1/pwr)))), prob=p, replace=TRUE)
                        f <- cnStates[s,"f"]
                        mu.c <- (bb$total_cn[i]*purity + 2*(1-purity))/g * n
                        c <- rnbinom(length(f), size=1/rho, mu=mu.c)
                        x <- rbetabinom(n=length(f), size=c, prob=f, rho=rho)
                        pos <- round(runif(length(f), min=start(bb)[i], max=end(bb)[i]))
                        w <- which(x>=xmin)
                        V[[i]] <- VRanges(seqnames=seqnames(bb)[i], IRanges(pos, width=1), ref="N", alt="A", totalDepth=c, altDepth=x)[w]
                    })
    V <- do.call("c", V[!sapply(V, is.null)])
    sampleNames(V) <- "SAMPLE"
    v <- as(V, "VCF")
    info(header(v)) <- rbind(info(header(v)),info(header(finalSnv[[1]]))[c("t_ref_count","t_alt_count"),])
    info(v)$t_alt_count <- altDepth(V)
    info(v)$t_ref_count <- totalDepth(V) - altDepth(V)
    return(v)
}

13.2 PCAWG-functions.R

All basic functions

# TODO: Add comment
# 
# Author: mg14
###############################################################################

library(Rsamtools)
library(VariantAnnotation)

vcfPath <- '../final/final_consensus_12oct_passonly/snv_mnv'
basePath <-  '../dp/20170129_dpclust_finalConsensusCopynum_levels_a_b_c_d'
dpPath <- paste0('../final/consensus_subclonal_reconstruction_20170325')
#CANCERGENES <- read.table('../ref/cancer_genes.txt')$V1
purityPloidy <- read.table( '../final/consensus.20170218.purity.ploidy.txt', header=TRUE, row.names=1)
#colnames(purityPloidy) <- c("purity","ploidy")
cnPath <- paste0(basePath,'/4_copynumber/')
bbPath <- paste0(basePath,'/4_copynumber/')

allGender <- read.table('../final/2016_12_09_inferred_sex_all_samples.txt', header=TRUE, sep='\t')
allGender <- allGender[!duplicated(allGender$tumourid) & allGender$tumourid != 'tumourid',]
#write.table(gender,'../gender/2016_12_09_inferred_sex_all_samples_CORRECTED_MG.txt', row.names=FALSE, col.names=TRUE, sep='\t', quote=FALSE)
rownames(allGender) <- allGender$tumourid

addTNC <- function(vcf){    
    r = "../ref/genome.fa.gz" #meta(header(v))["reference",]
    if(!"TNC" %in% rownames(header(vcf)@header$INFO)){
        tnc=scanFa(file=r, resize(granges(vcf), 3,fix="center"))
        i = header(vcf)@header$INFO
        info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Trinucleotide context", row.names="TNC"))
        info(vcf)$TNC <- as.character(tnc)
    }
    return(vcf)
}

dpFiles <- dir(dpPath, pattern="_subclonal_structure.txt", recursive=TRUE)
    
bbFiles <- dir(bbPath, pattern="_segments.txt", recursive=TRUE)

wccTable <- read.table("../final/wcc_consensus_values_9_12.tsv", header=TRUE, sep='\t')
d <- data.frame(cluster=wccTable$sc_n, n_ssms=wccTable$consensus_mutation_number, proportion = round(wccTable$consensus_cluster_cp,3))
d[d$cluster==1,"proportion"] <- wccTable[d$cluster==1,"purity"]
wccClusters <- split(d, wccTable$sid)
wccPurity <- d[d$cluster==1,"proportion"] 
#plot(wccPurity, purityPloidy[,"purity"])

loadClusters <- function(ID){
    file <- paste0(dpPath,"/",grep(paste0(ID,"[[:punct:]]"), dpFiles, value=TRUE, perl=TRUE))
    if(grepl(".gz", file))
        file <- gzfile(file)
    read.table(file, header=TRUE, sep="\t")
}

loadConsensusClusters <- function(ID){
    file <- paste0(dpPath,"/",grep(paste0(ID,"[[:punct:]]"), dpFiles, value=TRUE, perl=TRUE))
    if(grepl(".gz", file))
        file <- gzfile(file)
    read.table(file, header=TRUE, sep="\t")
}

consensusClustersToOld <- function(clusters){
    data.frame(cluster=clusters$cluster, n_ssms=clusters$n_snvs, proportion=clusters$fraction_total_cells)
}

parseRegion <- function(regions){
    chr <- regmatches(regions, regexpr("^.+(?=:)",regions,perl=TRUE))
    start <- as.numeric(regmatches(regions, regexpr("(?<=:)[0-9]+(?=-)",regions,perl=TRUE)))
    end <- as.numeric(regmatches(regions, regexpr("(?<=-)[0-9]+$",regions,perl=TRUE)))
    data.frame(chr,start,end)
}

loadCn <- function(ID){
    file <- paste0(cnPath, "/",ID,"_timingsMle.txt")
    tab <- read.table(file, header=TRUE, sep=" ")
    reg <- parseRegion(tab$ascatId)
    GRanges(tab$chr, IRanges(reg$start,reg$end), strand="*", tab[-1])
}

loadBB <- function(ID){
    t <- try({
                file <- grep(paste0(ID,"[[:punct:]]"), dir(bbPath, pattern="segments.txt", recursive=TRUE, full.names=TRUE), value=TRUE)
                if(grepl(".gz", file))
                    file <- gzfile(file)
                tab <- read.table(file, header=TRUE, sep='\t')
                GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", tab[-3:-1])
            })
    if(class(t)=='try-error') GRanges(copy_number=numeric(), major_cn=numeric(), minor_cn=numeric(), clonal_frequency=numeric()) else t
}

loadConsensusCNA <- function(ID, purity=1, path="../final/consensus.20170119.somatic.cna.annotated"){
    file <- grep(paste0(ID,"[[:punct:]]"), dir(path, pattern="cna.annotated.txt", recursive=TRUE, full.names=TRUE), value=TRUE)
    if(grepl(".gz", file))
        file <- gzfile(file)
    tab <- read.table(file, header=TRUE, sep='\t')
    subclonalIndex <- !is.na(tab$total_cn) & !is.na(tab$battenberg_nMaj2_A) & !is.na(tab$battenberg_nMin2_A) & !is.na(tab$battenberg_frac2_A) & (tab$battenberg_nMaj1_A == tab$major_cn & tab$battenberg_nMin1_A == tab$minor_cn | tab$battenberg_nMaj2_A == tab$major_cn & tab$battenberg_nMin2_A == tab$minor_cn)
    ix <- c(1:nrow(tab), which(subclonalIndex))
    gr <- GRanges(tab$chromosome, IRanges(tab$start, tab$end), strand="*", clonal_frequency=purity, tab[-3:-1])[ix]
    if(any(subclonalIndex)){
        gr$clonal_frequency[which(subclonalIndex)] <- tab$battenberg_frac1_A[subclonalIndex] * purity
        gr$major_cn[which(subclonalIndex)] <- tab$battenberg_nMaj1_A[subclonalIndex]
        gr$minor_cn[which(subclonalIndex)] <- tab$battenberg_nMin1_A[subclonalIndex]
        gr$total_cn[which(subclonalIndex)] <- tab$battenberg_nMaj1_A[subclonalIndex] + tab$battenberg_nMin1_A[subclonalIndex]
        gr$clonal_frequency[-(1:nrow(tab))] <- tab$battenberg_frac2_A[subclonalIndex] * purity
        gr$total_cn[-(1:nrow(tab))] <- tab$battenberg_nMaj2_A[subclonalIndex] + tab$battenberg_nMin2_A[subclonalIndex]
        gr$major_cn[-(1:nrow(tab))] <- tab$battenberg_nMaj2_A[subclonalIndex]
        gr$minor_cn[-(1:nrow(tab))] <- tab$battenberg_nMin2_A[subclonalIndex]
    }
    seqlevels(gr) <- c(1:22, "X","Y")
    sort(gr)
}

refFile = "../ref/genome.fa.gz" #meta(header(v))["reference",]
refLengths <- scanFaIndex(file=refFile)
chrOffset <- cumsum(c(0,as.numeric(width(refLengths))))
names(chrOffset) <- c(seqlevels(refLengths), "NA")

averagePloidy <- function(bb) {
    c <- if(!is.null(bb$copy_number)) bb$copy_number else bb$total_cn
    sum(width(bb) * c * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

averageEvenPloidy <- function(bb){
    sum(width(bb) * (!bb$major_cn %% 2 & !bb$minor_cn %% 2) * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

getTumorCounts <- function(vcf){
    sapply(grep("(F|R).Z", names(geno(vcf)), value=TRUE), function(i) geno(vcf)[[i]][,"TUMOUR"])
}

getTumorDepth <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count + info(vcf)$t_ref_count
    }else{ ## older data
        if("FAZ" %in% rownames(geno(header(vcf)))){
            rowSums(getTumorCounts(vcf))
        }else{
            geno(vcf)$DEP[,2]
        }
    }
}

getAltCount <- function(vcf){
    if("t_alt_count" %in% colnames(info(vcf))){ ## consensus data, snv and indel
        info(vcf)$t_alt_count
    }else{ ## older formats
        if("FAZ" %in% rownames(geno(header(vcf)))){ ## ie subs
            c <- getTumorCounts(vcf)
            t <- c[,1:4] + c[,5:8]
            colnames(t) <- substring(colnames(t),2,2)
            a <- as.character(unlist(alt(vcf)))
            a[!a%in%c('A','T','C','G')] <- NA
            sapply(seq_along(a), function(i) if(is.na(a[i])) NA else t[i, a[i]])
        }
        else{ ## ie indel
            #(geno(vcf)$PP + geno(vcf)$NP + geno(vcf)$PB + geno(vcf)$NB)[,"TUMOUR"]
            geno(vcf)$MTR[,2]
        }
    }
}



mergeClusters <- function(clusters, deltaFreq=0.05){
    if(nrow(clusters) <= 1) return(clusters)
    h <- hclust(dist(clusters$proportion), members=clusters$n_ssms)
    ct <- cutree(h, h=deltaFreq)
    cp <- as.matrix(cophenetic(h))
    Reduce("rbind",lapply(unique(ct), function(i) {
                        n_ssms <- sum(clusters$n_ssms[ct==i])
                        w <- max(cp[ct==i,ct==i])
                        data.frame(new.cluster=i, n_ssms=n_ssms, proportion=sum(clusters$proportion[ct==i]*clusters$n_ssms[ct==i])/n_ssms, width=w)
                    }
    ))
}


removeSuperclones <- function(clusters, min.frac=0.1, delta.prop=0.1) {
    m <- which(clusters$proportion == max(clusters$proportion[clusters$n_ssms >= 0.1 * sum(clusters$n_ssms)]))
    w <- clusters$proportion >= clusters$proportion[m] - delta.prop
    if(sum(w)>1){
        cl <- as.data.frame(rbind(if(any(!w)) clusters[!w,,drop=FALSE], if(any(w)) colSums(clusters[w,,drop=FALSE]*(clusters[w,"n_ssms"]/sum(clusters[w,"n_ssms"])))))
        cl[nrow(cl),"n_ssms"] <- sum(clusters[w,"n_ssms"])
        clusters <- cl
    }
    return(clusters)
}

clustersFromBB <- function(bb){
    w <- bb$clonal_frequency == max(bb$clonal_frequency, na.rm=TRUE) | bb$clonal_frequency < 0.5 * max(bb$clonal_frequency, na.rm=TRUE)
    t <- table(bb$clonal_frequency[w])
    cl <- data.frame(cluster=seq_along(t), n_ssms=as.numeric(t), proportion=as.numeric(names(t)))
    mergeClusters(cl, deltaFreq=0.2)
}



mergeClustersByMutreadDiff = function(clusters, purity, ploidy, vcf_snv, min_read_diff) {
    calc_exp_mutreads_ccf = function(ccf, purity, ploidy, mean_depth) {
        return(ccf / (purity*ploidy + (1-purity)*2) * mean_depth)
    }
    clusters_new = clusters
    exp_reads = sapply(clusters$ccf, calc_exp_mutreads_ccf, purity=purity, ploidy=ploidy, mean_depth=mean(getTumorDepth(vcf_snv), na.rm=T))
    ccf_diff = exp_reads[1:(length(exp_reads)-1)] - exp_reads[2:length(exp_reads)]
    
    
    if (any(ccf_diff < min_read_diff)) {
        
        # Iteratively merge a pair of clusters untill no more pairs within distance can be found
        merged = T
        while(merged) {
            merged = F
            
            exp_reads = sapply(clusters_new$ccf, calc_exp_mutreads_ccf, purity=purity, ploidy=ploidy, mean_depth=mean(getTumorDepth(vcf_snv), na.rm=T))
            ccf_diff = exp_reads[1:(length(exp_reads)-1)] - exp_reads[2:length(exp_reads)]
            to_merge = which(ccf_diff < min_read_diff)
            
            if (length(to_merge)==0) {
                merged = F
                break
            } else {
                i = to_merge[1]
                clusters_new$ccf[i] = sum(clusters_new$ccf[c(i, i+1)]*clusters_new$n_ssms[c(i, i+1)]) / sum(clusters_new$n_ssms[c(i, i+1)])
                clusters_new$n_ssms[i] = sum(clusters_new$n_ssms[c(i, i+1)])
                clusters_new = clusters_new[-(i+1),]
                merged = T
            }
            
            if (nrow(clusters_new)==1) {
                merged = F
                break
            }
        }
    }
    clusters_new$proportion = clusters_new$ccf * purity
    
    # sorting and renumbering clusters
    clusters_new = clusters_new[with(clusters_new, order(proportion, decreasing=T)),]
    clusters_new$cluster = 1:nrow(clusters_new)
    return(clusters_new)
}





probGenotype <- function(vcf){
    dg <- factor(paste(unlist(info(vcf)$DG)), levels=c("NA",as.character(CANCERGENES)))
    P <- pGainToTime(vcf)
    G <- matrix(0, ncol=5, nrow=nlevels(dg), dimnames=list(levels(dg), c(colnames(P),"NA")))
    t <- table(dg)
    for(g in names(t[t>0]))
        G[g,] <- c(colSums(P[dg==g,,drop=FALSE],na.rm=TRUE), "NA"=sum(is.na(P[dg==g,1])))
    return(G)
}

probGenotypeTail <- function(vcf){
    dg <- factor(paste(unlist(info(vcf)$DG)), levels=c("NA",as.character(CANCERGENES)))
    P <- info(vcf)$pMutCNTail
    G <- rep(NA, nlevels(dg))
    names(G) <- levels(dg)
    t <- table(dg)
    for(g in names(t[t>0]))
        G[g] <- mean(P[dg==g,drop=FALSE],na.rm=TRUE)
    return(G)
}

getGenotype <- function(vcf, reclassify='missing', ...){
    w <- c(TRUE,diff(start(vcf)) != 1)
    cls <- classifyMutations(vcf, reclassify=reclassify)
    t <- info(vcf)$TCN
    if(is.null(t))
        t <- info(vcf)$MinCN + info(vcf)$MajCN
    hom <- factor(info(vcf)$MutCN==t, levels=c(TRUE,FALSE))
    dg <- factor(unlist(info(vcf)$DG), levels=as.character(CANCERGENES))
    table(gene=dg[w], class=cls[w], homozygous=hom[w], ...)
}

tryExceptNull <- function(x) if(class(x)=="try-error") GRanges() else x

loadVcf <- function(ID){
    file <- dir(vcfPath, pattern=paste0(ID, ".+somatic.snv_mnv.TNC.vcf.bgz$"), full.names=TRUE)
    pos <- loadPositions(ID)
    vcf <- readVcf(file, genome="GRCh37") #, param=ScanVcfParam(which=pos))
    f <- findOverlaps(pos, vcf, select="first")
    vcf <- vcf[na.omit(f)]
    vcf <- addDriver(vcf, CANCERGENES)
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="Numeric",Description="DP cluster", row.names="DPC"))
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="Numeric",Description="DP cluster probability", row.names="DPP"))
    info(vcf)$DPC <- pos$cluster[!is.na(f)]
    info(vcf)$DPP <- pos$likelihood[!is.na(f)]  
    vcf
}

isDeamination <- function(vcf) grepl("(A.CG)|(T..CG)", paste(as.character(unlist(alt(vcf))),vcf@info$TNC))
isDeaminationNoUV <-  function(vcf) grepl("(A.CG[C,T])|(T.[A,G]CG)", paste(as.character(unlist(alt(vcf))),vcf@info$TNC))


testDriver <- function(vcf) sapply(info(vcf)$VC, function(x) if(length(x) ==0) FALSE  else any(x %in% c('nonsense','missense','ess_splice','frameshift','inframe','cds_distrupted')))

addDriver <- function(vcf, mutsigDrivers){
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Driver gene", row.names="DG"))
    if(nrow(vcf)==0){
        info(vcf)$DG <- CharacterList()
        return(vcf)
    }
    
    r <- paste(paste0("^",mutsigDrivers,"(?=\\|)"), collapse="|")
    rowIdx <- grepl(r, info(vcf)$VD, perl=TRUE) & testDriver(vcf)
    g <- sapply(info(vcf)$VD, function(x) sub("\\|.+","", x))
    d <- ifelse(rowIdx,g,character(0))
    #d[is.na(d)] <- character(0)
    info(vcf)$DG <- as(d,"CharacterList")
    vcf
}

loadAssignment <- function(ID){
    file <- paste0(dpPath,"/",ID,"_DPoutput_1250iters_250burnin/",ID,"_DP_and_cluster_info.txt")
    read.table(file, header=TRUE, sep="\t")
}

addAssignment <- function(vcf, ID){
    a <- loadAssignment(ID)
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=ncol(a),Type="Numeric",Description="DP probability", row.names="DPP"))
    info(vcf)$DPP <- as.matrix(a)
    vcf
}

loadPositions <- function(ID){
    file <- gzfile(paste0(dpPath,"/",ID,"_mutation_assignments.txt.gz"))
    tmp <- read.table(file, header=TRUE, sep="\t")
    #GRanges(tmp$chr, IRanges(tmp$start+1, tmp$end), cluster=tmp$cluster, likelihood=tmp$likelihood)
    GRanges(tmp$chr, IRanges(tmp$pos, width=1), cluster=tmp$cluster)
}

tncToPyrimidine <- function(vcf){
    a <- unlist(alt(vcf))
    r <- ref(vcf)
    tnc <- DNAStringSet(info(vcf)$TNC)
    rc <- grepl("A|G", r)
    tnc[rc] <- reverseComplement(tnc[rc])
    a[rc] <- reverseComplement(a[rc])
    t <- paste0(substr(tnc,1,1), "[",substr(tnc,2,2), ">",a, "]", substr(tnc,3,3))
    n <- c("A","C","G","T")
    f <- paste0(rep(n, each=4), "[", rep(c("C","T"), each=96/2), ">", c(rep(c("A","G","T"), each=48/3), rep(c("A","C","G"), each=48/3)), "]", n)
    factor(t, levels=f)
} 


applyPigeonHole <- function(ID){
    c <- loadClusters(ID)
    p <- purityPloidy[ID,"purity"]
    mcf <- c$proportion#*p
    l <- sapply(1:length(mcf), function(i) mcf[i] > pmax(0,1-mcf))
    w <- which(l & upper.tri(l), arr.ind=TRUE)
    cbind(c$cluster[w[,1]], c$cluster[w[,2]])
}

reduceToCoverRelations <- function(rel){
    if(nrow(rel) ==0) return(rel)
    n <- max(rel)
    P <- matrix(FALSE,n,n)
    for(i in 1:nrow(rel))
        P[rel[i,1],rel[i,2]] <- TRUE
    for(i in 1:n){
        q <- list()
        visit <- logical(n)
        for(j in 1:n)
            if(P[i,j])
                q <- c(q,j)
        while(length(q)>0){
            j <- q[[1]]
            q[[1]] <- NULL
            for(k in 1:n){
                if(P[j,k] & !visit[k]){
                    visit[k] <- TRUE
                    q <- c(q,k)
                    if(P[i,k])
                        P[i,k] <- FALSE
                    if(P[k,i])
                        stop("Error.")
                    
                }
            }
        }
    }
    which(P, arr.ind=TRUE)
}

cnWeights <- function(vcf){
    t <- if(is.null(info(vcf)$TCN)) (info(vcf)$MajCN + info(vcf)$MinCN) else info(vcf)$TCN
    info(vcf)$MutCN / t
}

branchLengths <- function(vcf, type=c("all","deamination")){
    type <- match.arg(type)
    if(type=="deamination")
        w <- isDeamination(vcf)
    else
        w <- rep(TRUE, nrow(vcf))
    cnw <- cnWeights(vcf)
    u <- allClusters[[meta(header(vcf))$META["ID",1]]]$cluster
    b <- sapply(u, function(c) sum(2*cnw * (info(vcf)$DPC==c & w), na.rm=TRUE))
    #if(length(b)==0) b <- rep(0, length(u))
    names(b) <- u
    return(b)
}

avgWeights <- function(vcf, type=c("all","deamination")){
    type <- match.arg(type)
    if(type=="deamination")
        w <- isDeamination(vcf)
    else
        w <- rep(TRUE, nrow(vcf))
    cnw <- cnWeights(vcf)
    mean(2*cnw[w], na.rm=TRUE)
}

predictRealTime <- function(x, signatures=snmf$snmfFit$P[-1,]){
    snmf$snmfFit$P[1,1] / snmf$weight * snmf$nmSolve(x, signatures, maxIter=100)[1,]
}

#' ### Compute graphs (posets)
toGraph <- function(edgelist, branch.length, edge.labels, node.labels=1:max(edgelist)){
    g <- graph.edgelist(edgelist)
    E(g)$weight <- branch.length
    E(g)$name <- edge.labels
    V(g)$name <- node.labels
    return(g)   
}

na.rm <- function(x) x[!is.na(x)]

plotPoset <- function(g){
    c <- colorRampPalette(brewer.pal(9, "Spectral"))(10)
    plot(g, layout=layout.reingold.tilford(g), edge.label=E(g)$name, vertex.size = 25*pmin(1,V(g)$size), edge.width=E(g)$weight/100)
}

#' Distance in poset        
posetDist <- function(g) {
    e <- get.edgelist(g)
    w <-  c(0,E(g)$weight)
    names(w) <- c("Germline", e[,2])
    d <- shortest.paths(g, mode='out')
    d <- d - rep(w[colnames(d)], each=length(w))/2
    diag(d) <- NA
    d
}

getMutationCluster <- function(allMutations, vcf){
    m <- match(allMutations, unlist(info(vcf)$DG))
    info(vcf)$DPC[m]
}

distAsRange <- function(g){
    e <- get.edgelist(g)
    w <-  c(0,E(g)$weight)
    names(w) <- c("Germline", e[,2])
    d <- shortest.paths(g, mode='out')
    y <- shift(IRanges(-w[colnames(d)],0), d["Germline", ])
    names(y) <- paste0(colnames(d), ", genes=",E(g)$name[match(colnames(d), e[,2])])
    y
}


nmSolve <- function(D, P, maxIter = 500, tol=1e-3) {
    n <- nrow(D)
    m <- ncol(D)
    s <- ncol(P)
    tP <- t(P)
    rP <- rep(colSums(P), m)
    D <- as.matrix(D)
    E1 <- E2 <- matrix(runif(s * m, 1e-3, 1), ncol = m)
    err <- 2*tol
    
    iter <- 1
    while (iter < maxIter & err > tol) {
        E1 <- E2
        E2 <- E1 * (tP %*% (D/(P %*% (E1 + .Machine$double.eps))))/rP
        iter <- iter + 1
        err <- mean(abs(E2 - E1)/(E1+.Machine$double.eps), na.rm=TRUE)
        if(iter %% 100 == 0) cat(round(-log10(err)))
    }
    cat("\n")
    if(iter == maxIter) warning(paste("No convergence after",iter, "iterations."))
    E2
}

wnmSolve <- function(D, P, weights =  rep(0, ncol(P)), maxIter = 500, tol=1e-3) {
    D <- as.matrix(D)
    D <- rbind(D, matrix(weights, ncol=ncol(D), nrow=ncol(P)))
    P <- rbind(P, diag(rep(1,ncol(P))))
    n <- nrow(D)
    m <- ncol(D)
    s <- ncol(P)
    tP <- t(P)
    rP <- rep(colSums(P), m)
    E1 <- E2 <- matrix(runif(s * m, 1e-3, 1), ncol = m)
    err <- 2*tol
    
    iter <- 1
    while (iter < maxIter & err > tol) {
        E1 <- E2
        E2 <- E1 * (tP %*% (D/(P %*% (E1 + .Machine$double.eps))))/rP
        iter <- iter + 1
        err <- mean(abs(E2 - E1)/(E1+.Machine$double.eps), na.rm=TRUE)
        if(iter %% 100 == 0) cat(round(-log10(err)))
    }
    cat("\n")
    if(iter == maxIter) warning(paste("No convergence after",iter, "iterations."))
    E2
}



wgdTest <- function(vcf){
    id <- meta(header(vcf))$META["ID",1]
    bb <- allBB[[id]]
    ix <- which(bb$copy_number==4 & bb$minor_cn==2)
    v <- vcf[vcf %over% bb[ix]]
    #w <- sum(as.numeric(width(reduce(bb[ix]))))
    t <- table(info(v)$MutCN, info(v)$TCN, as.character(seqnames(v)), info(v)$DPC)
}

#' Power
power <- function(f,n, theta=6.3, err=1e-4) if(any(is.na(c(f,n,theta,err)))) NA else sum((log10(dbinom(0:n, n, 0:n/n) / dbinom(0:n,n,err)) > theta) * dbinom(0:n,n,f))

testIndel <- function(vcf) sapply(info(vcf)$VC, function(x) if(length(x) ==0) FALSE  else any(x %in% c('frameshift','inframe','ess_splice','SO:0001577:complex_change_in_transcript', 'SO:0001582:initiator_codon_change', 'splice_region')))

asum <- function(x, dim) apply(x, setdiff(seq_along(dim(x)), dim), sum)

#' official driver file
#d <- lapply(2:3, function(sheet) xlsx::read.xlsx2(file="../ref/TableS2_driver_point_mutations_annotation.xlsx", sheetIndex=sheet, colIndex=1:22, stringsAsFactors=FALSE, na.char="NaN"))
#colnames(d[[2]]) <- colnames(d[[1]])
#drivers <- do.call("rbind",d)
#drivers[drivers=="NaN" | drivers==""] <- NA
#drivers <- as.data.frame(sapply(drivers, function(x) if(all(!is.na(as.numeric(x[!is.na(x)])))) as.numeric(x) else x, simplify=FALSE))
finalData <- read.table("../final/ref/release_may2016.v1.4.tsv", header=TRUE, sep="\t")
#r <- gsub("-","",drivers$ref)
#i <- grepl("-",drivers$ref) | grepl("-",drivers$alt)  #drivers$mut_type=="indel" # need to fix indels
#r[i] <- paste0("N",r[i])
#a <- gsub("-","",drivers$alt)
#a[i] <- paste0("N",a[i])
#p <- drivers$pos
#p[i & !grepl("-", drivers$ref)] <- p[i & !grepl("-", drivers$ref)]-1
#m <- sapply(levels(drivers$sample), function(x) grep(x, finalData$sanger_variant_calling_file_name_prefix))
#finalDrivers <- VRanges(seqnames = drivers$chr, ranges=IRanges(p, width =  width(r)), ref=DNAStringSet(r), alt=DNAStringSet(a), sampleNames = finalData$icgc_donor_id[m[drivers$sample]])
#mcols(finalDrivers) <- cbind(sample=drivers$sample, samples=finalData$sanger_variant_calling_file_name_prefix[m[drivers$sample]], ID= drivers$gene_id, drivers[,8:22], mut_type=ifelse(i, "indel","snv"))
#save(finalDrivers, file="../ref/TableS2_driver_point_mutations_annotation.RData")
load(file="../ref/TableS2_driver_point_mutations_annotation.RData")
CANCERGENES <- levels(finalDrivers$ID)

matchDrivers <- function(vcf, finalDrivers) {
    ID <- meta(header(vcf))$META["ID",1]
    d <- finalDrivers[grep(ID, finalDrivers$samples)]
    g <- factor(rep(NA,nrow(vcf)), levels = levels(d$ID))
    if(length(d)==0)
        return(g)
    overlaps <- findOverlaps(vcf, d)
    g[queryHits(overlaps)] <- d$ID[subjectHits(overlaps)]
    return(g)
}

addFinalDriver <- function(vcf, finalDrivers){
    i = header(vcf)@header$INFO
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Driver mutation", row.names="DG"))
    info(vcf)$DG <- factor(rep(NA,nrow(vcf)), levels = levels(finalDrivers$ID))
    if(nrow(vcf)==0)
        return(vcf)
    g <- matchDrivers(vcf = vcf, finalDrivers = finalDrivers)
    info(vcf)$DG <- g
    return(vcf)
}


clinicalData <- read.table("../ref/pcawg_donor_clinical_August2016_v9.tsv", header=TRUE, sep="\t", comment="", quote="")

load("../ref/Sarcs_ages.RDa")
for(x in Sarcs_age)
    clinicalData$donor_age_at_diagnosis[match(as.character(x$icgc_donor_id), as.character(clinicalData$icgc_donor_id))] <- as.numeric(x$Age)
rm(Sarcs_age)
specimenData <- read.table("../ref/pcawg_specimen_histology_August2016_v9.tsv", header=TRUE, sep="\t", comment="", quote="")
specimenData$histology_abbreviation <- sub("CA$","Ca",specimenData$histology_abbreviation)

s <- strsplit(as.character(finalData$sanger_variant_calling_file_name_prefix),",")
sample2donor <- as.character(finalData$icgc_donor_id[unlist(sapply(seq_along(s), function(i) rep(i, length(s[[i]]))))])
names(sample2donor) <- unlist(s)

s <- unlist(strsplit(as.character(finalData$sanger_variant_calling_file_name_prefix),","))
sample2icgc <- unlist(strsplit(as.character(finalData$tumor_wgs_icgc_sample_id),",")) #as.character(finalData$tumor_wgs_icgc_sample_id[unlist(sapply(seq_along(s), function(i) rep(i, length(s[[i]]))))])
names(sample2icgc) <- s#unlist(s)


donor2type <- factor(specimenData$histology_abbreviation, levels=c(sort(unique(specimenData$histology_abbreviation))[-1], ""))
donor2type <- as.character(donor2type)
donor2type[donor2type=="Kidney-RCC" & grepl("clear cell", specimenData$histology_tier4)] <- "Kidney-CCRCC"
donor2type[donor2type=="Kidney-RCC" & grepl("papillary",specimenData$histology_tier4)] <- "Kidney-PapRCC"
donor2type <- factor(donor2type)
names(donor2type) <- specimenData$icgc_donor_id
levels(donor2type)[levels(donor2type)==""] <- "Other/NA"


t <- read.table("../ref/tumour_subtype_consolidation_map.tsv - Unique List of Tumour Types_August.tsv", sep='\t', header=TRUE, comment="")
c <- as.character(t$`Color..RGB.code.`)
names(c) <- sub("CA$","Ca",t$`Abbreviation`)
c <- c[c != ""  & !duplicated(names(c))]
tissueColors <- c(table(donor2type))*NA
tissueColors[names(c)] <- c
tissueColors["Lymph-CLL"] <- "#F4A35D"
tissueColors["Kidney-CCRCC"] <-  tissueColors["Kidney-RCC"]
tissueColors["Kidney-PapRCC"] <- "#E53E00"
tissueColors <- tissueColors[levels(donor2type)]

tissueBorder <- c("white","black")[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")+1]
names(tissueBorder) <- names(tissueColors)

tissueLines <- tissueColors
tissueLines[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")] <- "black"

tissueLty <- c(1,1)[names(tissueColors) %in% c("Lung-SCC","Lung-AdenoCa")+1]
names(tissueLty) <- names(tissueColors)
tissueLty["Lung-SCC"] <- 5
tissueLty["Lung-AdenoCa"] <- 4

tissueCex <- tissueLty
tissueCex[grep("Lung", names(tissueCex))] <- 0.8

averageHom <- function(bb){
    sum(width(bb) * (bb$minor_cn == 0) * bb$clonal_frequency, na.rm=TRUE) / sum(width(bb) * bb$clonal_frequency, na.rm=TRUE)
}

.classWgd <- function(ploidy, hom) 2.9 -2*hom <= ploidy

classWgd <- function(bb) .classWgd(averagePloidy(bb), averageHom(bb))

plotBB <- function(bb, ylim=c(0,max(max(bb$total_cn, na.rm=TRUE))), col=RColorBrewer::brewer.pal(4,"Set2"), type=c("lines","bars"), legend=TRUE, lty.grid=1, col.grid="grey", xaxt=TRUE, xlim=c(min(chrOffset[as.character(seqnames(bb))]+start(bb)),max(chrOffset[as.character(seqnames(bb))]+end(bb)))){
    type <- match.arg(type)
    s <- c(1:22, "X","Y")
    l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
    names(l) <- s
    plot(NA,NA, ylab="Copy number",xlab="",xlim=xlim, ylim=ylim, xaxt="n")
    c <- cumsum(l)
    axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
    if(xaxt) mtext(side=1, at= cumsum(l) - l/2, text=names(l), line=1)
    #abline(v=c, lty=3)
    if(type=="lines"){
    x0 <- start(bb) + cumsum(l)[as.character(seqnames(bb))] - l[as.character(seqnames(bb))]
    x1 <- end(bb) + cumsum(l)[as.character(seqnames(bb))] - l[as.character(seqnames(bb))]
    lwd <- 5* bb$clonal_frequency / max(bb$clonal_frequency)
    segments(x0=x0, bb$major_cn ,x1, bb$major_cn, col=col[1], lwd=lwd)
    segments(x0=x0, bb$minor_cn -.125,x1, bb$minor_cn-.125, col=col[2], lwd=lwd)
    segments(x0=x0, bb$total_cn+.125,x1, bb$total_cn+.125, col=1, lwd=lwd)
#   cv <- coverage(bb)
#   cv <- cv[s[s%in%names(cv)]]
#   par(xpd=NA)
#   for(n in names(cv)){
#       cc <- cv[[n]]
#       segments(start(cc) + cumsum(l)[n] - l[n] ,-runValue(cc)/2,end(cc)+ cumsum(l)[n] - l[n], -runValue(cc)/2, col=4)
#   }
    }else{
        ub <- unique(bb)
        f <- findOverlaps(ub,bb)
        m <- t(model.matrix( ~ 0 + factor(queryHits(f))))
        ub$total_cn <- m %*% mg14::na.zero(bb$total_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$major_cn <- m %*% mg14::na.zero(bb$major_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$minor_cn <- m %*% mg14::na.zero(bb$minor_cn * bb$clonal_frequency) / max(bb$clonal_frequency)
        ub$clonal_frequency <- max(bb$clonal_frequency)
        x0 <- start(ub) + cumsum(l)[as.character(seqnames(ub))] - l[as.character(seqnames(ub))]
        x1 <- end(ub) + cumsum(l)[as.character(seqnames(ub))] - l[as.character(seqnames(ub))]
        rect(x0,0,x1, ub$major_cn, col=col[2], lwd=NA)
        rect(x0,ub$major_cn,x1, ub$total_cn, col=col[1], lwd=NA)
        abline(h = 1:floor(ylim[2]), lty=lty.grid, col=col.grid)
    }
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    if(xaxt) mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    if(legend){
        if(type=="lines") legend("topleft", c("Total CN","Major CN","Minor CN"), col=c("black", col[1:2]), lty=1, lwd=2, bg='white')
        else legend("topleft", c("Major CN","Minor CN"), fill=col[1:2], bg='white')
    }
}

plotVcf <- function(vcf, bb, clusters, col = RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)], ID = meta(header(vcf))[[1]]["ID",1], IS_WGD=classWgd(bb), NO_CLUSTER=FALSE, title=TRUE, legend=TRUE, lty.grid=1, col.grid="grey", xaxt=TRUE, pch=16, pch.out=pch, cex=0.66, xlim=c(0,chrOffset["MT"])) {
    cls <- factor(paste(as.character(info(vcf)$CLS)), levels = c("clonal [early]","clonal [late]","clonal [NA]","subclonal" , "NA"))
    plot(NA,NA, xlab='', ylab="VAF", ylim=c(0,1), xlim=xlim, xaxt="n", cex=cex)
    if(title){
        title(main=paste0(ID,", ", donor2type[sample2donor[ID]], "\nploidy=",round(averagePloidy(bb),2), ", hom=",round(averageHom(bb),2), if(IS_WGD) ", WGD" else "", if(NO_CLUSTER) ", (No clusters available)" else(paste0(", clusters=(",paste(round(clusters$proportion, 2), collapse="; "),")"))), font.main=1, line=1, cex.main=1)
    } 
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    if(xaxt) mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    for(i in which(!sapply(bb$timing_param, is.null))) {
                    s <- start(bb)[i]
                    e <- end(bb)[i]
                    x <- chrOffset[as.character(seqnames(bb)[i])]
                    y <- bb$timing_param[[i]][,"f"]
                    l <- bb$timing_param[[i]][,"pi.s"] * bb$timing_param[[i]][,"P.m.sX"]
                    l[is.na(l)] <- 0
                    if(any(is.na(c(s,e,x,y,l)))) next
                    segments(s+x,y,e+x,y, lwd=l*4+.1)
                    #text(x=(s+e)/2 +x, y=y, paste(signif(bb$timing_param[[i]][,"m"],2),signif(bb$timing_param[[i]][,"cfi"]/purityPloidy[meta(header(vv))["ID",1],"purity"],2), sep=":"), pos=3, cex=0.5)
                }
    points(start(vcf) + chrOffset[as.character(seqnames(vcf))], getAltCount(vcf)/getTumorDepth(vcf),col=col[cls],  pch=ifelse(info(vcf)$pMutCNTail < 0.025 | info(vcf)$pMutCNTail > 0.975, pch.out , pch),  cex=cex)                
    if(legend) legend("topleft", pch=19, col=col, legend=paste(as.numeric(table(cls)), levels(cls)), bg='white')
}

timeToBeta <- function(time){
    mu <- time[,1]
    #if(any(is.na(time))) return(c(NA,NA))
    mu <- pmax(1e-3, pmin(1 - 1e-3, mu))
    v <- (0.5 * (pmax(mu,time[,3])-pmin(mu,time[,2])))^2
    alpha <- mu * (mu * (1-mu) / v - 1)
    beta <- (1-mu) *  (mu * (1-mu) / v - 1)
    return(cbind(alpha, beta))
}

plotTiming <- function(bb, time=mcols(bb), col=paste0(RColorBrewer::brewer.pal(5,"Set2")[c(3:5)],"88"), legend=TRUE, col.grid='grey', lty.grid=1, xlim=c(0,chrOffset["MT"]), plot=2){
    plot(NA,NA, xlab='', ylab="Time [mutations]", ylim=c(0,1), xlim=xlim, xaxt="n")
    if(any(!is.na(bb$time)))
        tryCatch({
                    bb <- bb[!is.na(bb$time)]
                    s <- start(bb)
                    e <- end(bb)
                    x <- chrOffset[as.character(seqnames(bb))]
                    y <- time[,"time"]
                    rect(s+x,time[,"time.lo"],e+x,time[,"time.up"], border=NA, col=col[time[,"type"]], angle = ifelse(bb$time.star=="*" | is.na(bb$time.star),45,135), density=ifelse(bb$time.star == "***", -1, 72))
                    segments(s+x,y,e+x,y)
                    
                    if("time.2nd" %in% colnames(time)){ 
                        w <- !is.na(time[,"time.2nd"])
                        if(sum(w) != 0 & plot==2){
                            s <- start(bb)[w]
                            e <- end(bb)[w]
                            x <- chrOffset[as.character(seqnames(bb))][w]
                            y <- time[w,"time.2nd"]
                            rect(s+x,time[w,"time.2nd.lo"],e+x,time[w,"time.2nd.up"], border=NA, col=sub("88$","44",col)[as.numeric(time[w,"type"])], angle = ifelse(bb$time.star[w]=="*" | is.na(bb$time.star[w]),45,135), density=ifelse(bb$time.star[w] == "***", -1, 72))
                            segments(s+x,y,e+x,y)
                        }
                    }
                }, error=function(x) warning(x))
    abline(v = chrOffset[1:25], lty=lty.grid, col=col.grid)
    s <- c(1:22, "X","Y")
    l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
    names(l) <- s
    c <- cumsum(l)
    axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
    mtext(side=1, line=1, at=chrOffset[1:24] + diff(chrOffset[1:25])/2, text=names(chrOffset[1:24]))
    if(legend) legend("topleft", levels(time[,"type"]), fill=col, bg="white")
}

source("../modules/MutationTime.R/MutationTime.R")

findMainCluster <- function(bb, min.dist=0.05){
    w <- which(bb$n.snv_mnv > 20 & !is.na(bb$time))
#   d <- dist(bb$time[w])
#   ci <- weighted.mean((bb$time.up - bb$time.lo)[w], width(bb)[w])
#   h <- hclust(d, method='average', members=bb$n.snv_mnv[w])
#   c <- cutree(h, h=ci)
#   ww <- c==which.max(table(c))
#   weighted.mean(bb$time[w][ww], 1/((bb$time.up - bb$time.lo + min.dist)[w][ww]), na.rm=TRUE)
    s <- seq(0,1,0.01)
    l2 <- pmin(bb$time.lo, bb$time - min.dist)[w]
    u2 <- pmax(bb$time.up, bb$time + min.dist)[w]
    l1 <- (l2 +  bb$time[w])/2
    u1 <- (u2+  bb$time[w])/2
    wd <- as.numeric(width(bb)[w])
    o <- sapply(s, function(i) sum(wd * ( (l2 <= i & u2 >=i) + (l1 <= i & u1 >= i))))
    s[which.max(o)]
}

fractionGenomeWgdCompatible <- function(bb, min.dist=0.05){
    m <- findMainCluster(bb)
    l <- pmin(bb$time.lo, bb$time - min.dist)
    u <- pmax(bb$time.up, bb$time + min.dist)
    w <- which(l <= m & u >= m)
    avgCi <- weighted.mean(bb$time.up- bb$time.lo, width(bb), na.rm=TRUE)
    sd.wgd <- sqrt(weighted.mean((bb$time[w] - m)^2, width(bb)[w], na.rm=TRUE))
    sd.all <- sqrt(weighted.mean((bb$time - m)^2, width(bb), na.rm=TRUE))
    c(nt.wgd=sum(as.numeric(width(bb))[w]), nt.total=sum(as.numeric(width(bb))[!is.na(bb$time)]), time.wgd=m, n.wgd=length(w), n.all = sum(!is.na(bb$time)), chr.wgd = length(unique(seqnames(bb)[w])), chr.all = length(unique(seqnames(bb)[!is.na(bb$time)])), sd.wgd=sd.wgd, avg.ci=avgCi, sd.all=sd.all) 
}

flattenBB <- function(bb){
    u <- unique(bb)
    d <- duplicated(bb)
    mcols(u) <- mcols(u)[1:7]
    u$total_cn_2 <- u$major_cn_2 <- u$minor_cn_2 <- as.integer(NA)
    u$clonal_frequency_2 <- as.numeric(0)
    if(any(d)){
        s <- bb[d]
        f <- findOverlaps(s, u, select='first')
        mcols(u)[f, c("total_cn_2","major_cn_2","minor_cn_2","clonal_frequency_2")] <- mcols(s)[, c("total_cn","major_cn","minor_cn","clonal_frequency")]
    }
    u
}

reduceBB <- function(bb){
    b <- split(bb, do.call("paste", mcols(bb)[c("clonal_frequency","major_cn","minor_cn")]))
    r <- reduce(b)
    s <- sort(unlist(r))
    d <- DataFrame(t(sapply(strsplit(names(s), " "), as.numeric)))
    names(d) <- c("clonal_frequency","major_cn","minor_cn")#names(mcols(bb))
    mcols(s) <- d
    names(s) <- NULL
    u <- unique(bb)
    f <- findOverlaps(s, u)
    t <- table(subjectHits(f), queryHits(f))
    s$n.snv_mnv <- u$n.snv_mnv %*% as.matrix(t)
    s$total_cn <- s$major_cn + s$minor_cn
    s$timing_param <- vector(mode="list", length=length(s))
    s$timing_param[subjectHits(f)] <- u$timing_param[queryHits(f)]
    return(s)
}

stackTime <- function(bb, time="time", t=seq(0,1,0.01)){
    u <- unique(bb)
    cols <- paste0(time,c("",".up",".lo"))
    w <- as.numeric(width(u))
    u <- mcols(u)
    f <- function(x) pmin(pmax(x,0.01),0.99)
    ut <- f((0.5*5+u[,cols[1]] * u$n.snv_mnv)/(5+u$n.snv_mnv))
    uu <- f(u[,cols[2]])
    ul <- f(u[,cols[3]])
    diff(car::logit(f(t))) * rowSums(sapply(which(!is.na(ut)), function(i) w[i]*dnorm(car::logit(t[-1] - diff(t)/2), mean=car::logit(ut[i]), sd= (car::logit(uu[i]) - car::logit(ul[i]) + 0.05)/4)))#(t <= u$time.up[i] & t >= u$time.lo[i])))
    #rowSums(sapply(which(!is.na(ut)), function(i) w[i]*(t <= u$time.up[i] & t >= u$time.lo[i])))
}

betaFromCi <- function(x, weight.mode=5){
    if(any(is.na(x))) return(rep(NA,2))
    f <- function(par,x) {
        beta <- exp(par)
        sum((qbeta(c(0.025,0.975), beta[1], beta[2])-x[-1])^2)+weight.mode*((beta[1]-1)/(beta[1]+beta[2]-2)-x[1])^2
    }
    tryCatch(exp(optim(c(0.1,0.1), fn=f,x=x)$par), error=c(1,1))
}

histBeta <- function(bb, time="time",n.min=10, s=seq(0.005,0.995,0.01)){
    s <- pmax(0.001,pmin(0.999, s))
    cols <- paste0(time,c("",".lo",".up"))
    w <- which(bb$n.snv_mnv > n.min & !is.na(mcols(bb)[cols[1]]) & !duplicated(bb))
    if(length(w)==0) return(rep(NA, length(s)))
    d <- apply(as.matrix(mcols(bb)[w,c(cols, "n.snv_mnv")]), 1, function(x){
                beta <- betaFromCi(x[1:3])
                beta <- (beta * x[4] + 5*c(1,1))/(x[4]+5) # "posterior" with prior B(1,1)
                dbeta(s,beta[1],beta[2])
            })
    wd <- as.numeric(width(bb)[w])
    o <- d %*% wd
}



plotSample <- function(w, vcf = finalSnv[[w]],  bb = finalBB[[w]], sv=finalSv[[w]], title=w, regions=refLengths[1:24], ylim.bb=c(0,5), layout.height=c(4,1.2,3.5), y1=ylim.bb[2]-1) {
    p <- par()
    layout(matrix(1:3, ncol=1), height=layout.height)
    par(mar=c(0.5,3,0.5,0.5), mgp=c(2,0.25,0), bty="L", las=2, tcl=-0.25, cex=1)
    xlim=c(min(chrOffset[as.character(seqnames(regions))]+start(regions)),max(chrOffset[as.character(seqnames(regions))]+end(regions)))
    bbb <- bb[bb %over% regions]
    plotVcf(vcf[vcf %over% regions], bbb, finalClusters[[w]], title=FALSE, legend=FALSE, col.grid='white',  xaxt=FALSE, cex=0.33, xlim=xlim)
    mtext(line=-1, side=3, title, las=1)
    plotBB(bbb, ylim=ylim.bb, legend=FALSE, type='bar', col.grid='white', col=c("lightgrey", "darkgrey"), xaxt=FALSE, xlim=xlim)
    tryCatch({
        par(xpd=NA)
        plotSv(sv, y1=y1, regions=regions, add=TRUE)
        par(xpd=FALSE)
    }, error=function(x) warning(x))
    par(mar=c(3,3,0.5,0.5))
    plotTiming(bbb, xlim=xlim, legend=FALSE, col.grid=NA)
    if(length(regions) == 1)
        axis(side=1, at=pretty(c(start(regions), end(regions)))+chrOffset[as.character(seqnames(regions))], labels=sitools::f2si(pretty(c(start(regions), end(regions)))))
    if(any(!is.na(bb$time))){
        y0 <- seq(0.005,0.995,0.01)
        s <- histBeta(bb)
        g <- colorRampPalette(RColorBrewer::brewer.pal(4,"Set1")[c(3,2,4)])(100)
        segments(x0=chrOffset["MT"] ,y0=y0,x1=chrOffset["MT"] + s/max(s) * 1e8, col=g, lend=3)
        getMode <- function(s){
            if(all(is.na(s))) return(NA)
            w <- which.max(s)
            if(w %in% c(1, length(s))){
                m <- which(c(0,diff(s))>0 & c(diff(s),0)<0)
                if(length(m)==0) return(w)
                m <- m[which.max(s[m])]
                return(if(s[w] > 2*s[m]) w else m) 
            } else return(w)
        }
        abline(h=y0[getMode(s)], lty=5)
        if("time.2nd" %in% colnames(mcols(bb))) if(any(!is.na(bb$time.2nd))){
        s2 <- histBeta(bb, time="time.2nd")
        segments(x0=chrOffset["MT"] + s/max(s) * 1e8 ,y0=y0,x1=chrOffset["MT"] + s/max(s) * 1e8 + s2/max(s) * 1e8, col=paste0(g,"44"), lend=3)
        abline(h=y0[getMode(s2)], lty=3)
        
    }
    }
    #print(w)
    par(p[setdiff(names(p), c("cin","cra","csi","cxy","din","page"))])
}

plotSv <- function(sv, y0=0,y1=y0, h=1, col=paste0(RColorBrewer::brewer.pal(5,"Set1"),"44"), regions=refLengths[1:24], add=FALSE){
    if(add==FALSE){
        s <- c(1:22, "X","Y")
        l <- as.numeric(width(refLengths[seqnames(refLengths) %in% s]))
        names(l) <- s
        plot(NA,NA, ylab="Copy number",xlab="",xlim=xlim, ylim=ylim, xaxt="n")
        c <- cumsum(l)
        axis(side=1, at=c(0,c), labels=rep('', length(l)+1))
        if(length(regions) == 1)
            axis(side=1, at=pretty(c(start(regions), end(regions)))+chrOffset[as.character(seqnames(regions))], labels=sitools::f2si(pretty(c(start(regions), end(regions)))))
        if(xaxt) mtext(side=1, at= cumsum(l) - l/2, text=names(l), line=1)
    }
    #r <- rowRanges(sv)
    #a <- unlist(alt(sv))
    vs <- GRanges(info(sv)$MATECHROM, IRanges(info(sv)$MATEPOS, width=1))
    l <- 20
    x0 <- seq(0,1,l=l) 
    y2 <- x0*(1-x0)*4*h
    cls <- factor(as.character(info(sv)$SVCLASS), levels=c("DEL", "DUP", "h2hINV","t2tINV","TRA"))
    w <- which(sv %over% regions | vs %over% regions)
    for(i in w)
        try({
                    x <- seq(start(sv)[i] + chrOffset[as.character(seqnames(sv)[i])], start(vs)[i] + chrOffset[as.character(seqnames(vs)[i])], length.out=l)
                    x <- c(x[1], x, x[length(x)])
                    y <- y1 + y2 * if(grepl("INV", cls[i])) -1 else 1
                    y <- c(y0, y , y0)
                    lines(x, y, col=col[cls[i]])
                    #segments(x0=c(x[1], x[l]), x1=c(x[1],x[l]), y0=y0, y1=y1, col=col[cls[i]])
    })
}

t <- read.table("../ref/release_may2016.v1.1.TiN__donor.TiNsorted.20Jul2016.tsv", header=TRUE, sep="\t")
TiN <- t$TiN_donor
names(TiN) <- t$icgc_donor_id

w <- read.table("../final/structure_weme_released_consensus_merged.txt", header=TRUE)
wemeClustersMerged <- split(w[,1:4], w$sample)

13.3 VCF-annotate.R

# TODO: Add comment
# 
# Author: mg14
###############################################################################

set.seed(42)

args <- commandArgs(trailingOnly = TRUE)

source("PCAWG-functions.R")

vcfFileIn <- args[1]
vcfFileOut <- args[2]

print(vcfFileIn)
print(vcfFileOut)

library(VariantAnnotation)
library(Matrix)

s <- strsplit(vcfFileIn,"/")[[1]]
ID <- sub("\\..+", "", s[length(s)])


print(ID)

#' ## CLUSTERS
# Load clusters
clusters <- consensusClustersToOld(loadConsensusClusters((ID))) # consensus clusters
clusters$proportion <- wccClusters[[ID]]$proportion # WCC adjusted CP
clusters$n_ssms <- wemeClustersMerged[[ID]]$n_ssms # WEME prevalence to fix consensus bug
purity <- purityPloidy[ID,'purity']

#' ## COPYNUMBER
bb <- loadConsensusCNA(ID, purity=purityPloidy[ID, 'purity'])
IS_WGD <- classWgd(bb)

#' ## VCF 
#' Load vcf
vcf <- readVcf(vcfFileIn, genome="GRCh37") #, param=ScanVcfParam(which=pos))

# Add ID & gender
meta(header(vcf))$META <- rbind(meta(header(vcf))$META, DataFrame(Value=c(ID, as.character(allGender[ID, "pred_gender"])), row.names=c("ID", "gender")))

# Add driver genes
vcf <- addFinalDriver(vcf, finalDrivers)

# Add TNC
if(!"TNC" %in% rownames(info(header(vcf)))){
    tnc=scanFa(file=refFile, resize(granges(vcf), 3,fix="center"))
    i = info(header(vcf))
    info(header(vcf)) <- rbind(i, DataFrame(Number=1,Type="String",Description="Trinucleotide context", row.names="TNC"))
    info(vcf)$TNC <- as.character(tnc)
}

#' Add mutation copy numbers
# vcf <-  addMutCn(vcf, bb, clusters)
i = info(header(vcf))
info(header(vcf)) <- rbind(i,mcnHeader())
L <- computeMutCn(vcf, bb, clusters=clusters, purity=purity, xmin=3, gender=as.character(allGender[ID, "pred_gender"]), isWgd=IS_WGD, n.boot=500)
info(vcf) <- cbind(info(vcf), L$D)
bb$timing_param <- L$P 

#' Classify mutations
cls <- classifyMutations(vcf, reclassify='all')
info(vcf)$CLS <- cls
info(header(vcf)) <- rbind(info(header(vcf)), DataFrame(Number="1",Type="String",Description="Mutation classification: {clonal [early/late/NA], subclonal}", row.names="CLS"))

#' Timing
bb$n.snv_mnv <- countOverlaps(bb, vcf)
t <- bbToTime(bb)   
mcols(bb) <- DataFrame(mcols(bb), t)

#' Drivers
info(vcf)$DG <- matchDrivers(vcf, finalDrivers)

#' Save output
writeVcf(vcf, file=vcfFileOut)
bgzip(vcfFileOut, overwrite=TRUE)
unlink(vcfFileOut)
save(vcf, file=paste0(vcfFileOut,".RData"))


#' ## INDEL
vcfIndelFileIn <- sub("20160830","20161006",gsub("snv_mnv","indel", vcfFileIn))
vcfIndelFileOut <-  sub("20160830","20161006",gsub("snv_mnv","indel", vcfFileOut))
#' Load vcf
vcfIndel <- readVcf(vcfIndelFileIn, genome="GRCh37") #, param=ScanVcfParam(which=pos))
#' Add ID & gender
meta(header(vcfIndel))$META <- rbind(meta(header(vcfIndel))$META, DataFrame(Value=c(ID, as.character(allGender[ID, "pred_gender"])), row.names=c("ID", "gender")))
#' Add driver genes
vcfIndel <- addFinalDriver(vcfIndel, finalDrivers)
#' Add mutation copy numbers
i = info(header(vcfIndel))
info(header(vcfIndel)) <- rbind(i,mcnHeader())
L <- computeMutCn(vcfIndel, bb, clusters=clusters, purity=purity, xmin=3, gender=as.character(allGender[ID, "pred_gender"]), isWgd=IS_WGD)
info(vcfIndel) <- cbind(info(vcfIndel), L$D)
#' Classify mutation
clsIndel <- classifyMutations(vcfIndel, reclassify='all')
info(vcfIndel)$CLS <- clsIndel
info(header(vcfIndel)) <- rbind(info(header(vcfIndel)), DataFrame(Number="1",Type="String",Description="Mutation classification: {clonal [early/late/NA], subclonal}", row.names="CLS"))
#'Drivers
info(vcfIndel)$DG <- matchDrivers(vcfIndel, finalDrivers)


#' Save
writeVcf(vcfIndel, file=vcfIndelFileOut)
bgzip(vcfIndelFileOut, overwrite=TRUE)
unlink(vcfIndelFileOut)
save(vcfIndel, file=paste0(vcfIndelFileOut,".RData"))

#' Save BB
bb$n.indel <- countOverlaps(bb, vcfIndel)
seqlevels(bb) <- c(1:22, "X","Y")
bb <- sort(bb)
save(bb, file=sub("snv_mnv","cn",sub(".vcf$",".bb_granges.RData",vcfFileOut)))

#' Save clusters & purity
save(clusters, purity, file=sub("snv_mnv","clusters",sub(".vcf$",".clusters_purity.RData",vcfFileOut)))

#' ## PLOT
pdf(file=sub("snv_mnv","other",sub(".vcf$",".pdf",vcfFileOut)), 12,18)
par(mar=c(1,3,3,1), bty="L", mgp=c(2,.5,0), mfrow=c(4,1),cex=1, las=2)
j <- 1
for(v in c('vcf','vcfIndel')){
    vv <- get(v)
    col <- RColorBrewer::brewer.pal(9, "Set1")[c(3,4,2,1,9)]
    plotVcf(vcf = vv, bb = bb, clusters = clusters, col = col, ID = ID,  IS_WGD = IS_WGD, NO_CLUSTER = FALSE, title=j==1)
    j <- j+1
}
plotBB(bb, ylim=c(0,10))
try(plotTiming(bb))
dev.off()
#plot(start(vcf) + w[as.character(seqnames(vcf))], qnorm(info(vcf)$pMutCNTail), col=col[cls], xlab='Position', ylab="pTail", pch=16)